unix 在Python中使用os.system调用多个命令

pbossiut  于 2023-01-30  发布在  Unix
关注(0)|答案(9)|浏览(200)

我想从我的python脚本中调用多个命令,我试过使用os.system(),但是,当当前目录改变时,我遇到了问题。
示例:

os.system("ls -l")
os.system("<some command>") # This will change the present working directory 
os.system("launchMyApp") # Some application invocation I need to do.

现在,第三个启动呼叫不起作用。

yx2lnoni

yx2lnoni1#

os.system是C标准库函数system()的 Package 器。它的参数可以是任何有效的shell命令,只要它适合为进程的环境和参数列表保留的内存。
因此,用分号或换行符分隔每个命令,它们将在同一环境中一个接一个地执行。

os.system(" ls -l; <some command>; launchMyApp")
os.system('''
ls -l
<some command>
launchMyApp
''')
bpsygsoo

bpsygsoo2#

试试这个

import os

os.system("ls -l")
os.chdir('path') # This will change the present working directory
os.system("launchMyApp") # Some application invocation I need to do.
lnlaulya

lnlaulya3#

每个进程都有自己的当前工作目录,通常子进程不能改变父进程的目录,这就是为什么cd是一个内置的shell命令:它在相同的( shell )进程中运行。
每个os.system()调用都会创建一个新的shell进程,在这些进程中更改目录不会影响父进程,因此也不会影响后续的shell进程。
要在同一个shell示例中运行多个命令,可以使用subprocess模块:

#!/usr/bin/env python
from subprocess import check_call

check_call(r"""set -e
ls -l
<some command> # This will change the present working directory 
launchMyApp""", shell=True)

如果您知道目标目录;use cwd parameter suggested by @Puffin GDI instead .

bvn4nwqk

bvn4nwqk4#

这很简单,真的,对于Windows,用&分隔命令,对于Linux,用;分隔命令。
str.replace是解决该问题的一种非常好的方法,在下面的示例中使用:

import os
os.system('''cd /
mkdir somedir'''.replace('\n', ';')) # or use & for Windows
gv8xihay

gv8xihay5#

当你调用 os.system() 时,每次你创建一个subshell --当 os.system 返回时它会立即关闭(subprocess 是推荐调用OS命令的库)。如果你需要调用一组命令--在一次调用中调用它们。顺便说一句,你可以从Python中更改工作目录-- os.chdir

hjqgdpho

hjqgdpho6#

尝试使用子进程. popen和cwd
示例:

subprocess.Popen('launchMyApp', cwd=r'/working_directory/')
wfveoks0

wfveoks07#

就用
os.system("first command\nsecond command\nthird command")
我想你已经知道该怎么做了

wyyhbhjk

wyyhbhjk8#

os.system("ls -l && <some command>")

nnsrf1az

nnsrf1az9#

您可以使用os.chdir()更改回需要所在的目录

相关问题