在 Python 中使用 os.system 调用多个命令
Posted
技术标签:
【中文标题】在 Python 中使用 os.system 调用多个命令【英文标题】:Calling multiple commands using os.system in Python 【发布时间】:2013-12-01 06:34:13 【问题描述】:我想从我的 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.
现在,第三次调用启动不起作用。
【问题讨论】:
【参考方案1】:os.system
是标准 C 函数 system()
的包装器,因此它的参数可以是任何有效的 shell command,只要它适合为环境和参数列表保留的内存一个过程。
因此,将这些命令用分号或换行符分隔,它们将在同一环境中按顺序执行。
os.system(" ls -l; <some command>; launchMyApp")
os.system('''
ls -l
<some command>
launchMyApp
''')
【讨论】:
【参考方案2】:您可以使用os.chdir()
切换回您需要所在的目录
【讨论】:
【参考方案3】:os.system("ls -l && <some command>")
【讨论】:
【参考方案4】:很简单,真的。
对于 Windows,使用 &
分隔您的命令,对于 Linux,使用 ;
分隔它们。str.replace
是解决问题的一种非常好的方法,在下面的示例中使用:
import os
os.system('''cd /
mkdir somedir'''.replace('\n', ';')) # or use & for Windows
【讨论】:
【参考方案5】:试试这个
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.
【讨论】:
【参考方案6】:随便用
os.system("first command\nsecond command\nthird command")
我想你已经知道该怎么做了
【讨论】:
【参考方案7】:每个进程都有自己的当前工作目录。通常,子进程不能更改父进程的目录,这就是为什么cd
是一个内置的 shell 命令:它在同一个(shell)进程中运行。
每个os.system()
调用都会创建一个新的shell 进程。更改这些进程中的目录不会影响父 python 进程,因此不会影响后续的 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.
【讨论】:
【参考方案8】:尝试使用subprocess.Popen和cwd
示例:
subprocess.Popen('launchMyApp', cwd=r'/working_directory/')
【讨论】:
我可能不知道更改后的目录。有没有办法从上一次调用中获取更改后的目录?这样我就可以在调用“launchMyApp”时传递它 如果需要从cmd获取输出。也许你可以参考(***.com/questions/1388753/…)p = subprocess.Popen( ...)
和 line = p.stdout.readline()
【参考方案9】:
当你调用 os.system() 时,每次你创建一个子 shell - 当 os.system 返回时立即关闭(subprocess是调用操作系统命令的推荐库)。如果您需要调用一组命令 - 在一次调用中调用它们。 顺便说一句,您可以从 Python 更改工作主管 - os.chdir
【讨论】:
你能分享一个使用子流程的例子吗?以上是关于在 Python 中使用 os.system 调用多个命令的主要内容,如果未能解决你的问题,请参考以下文章
使用 os.system("bash code") 在 Python 脚本中调用 bash 命令是一种好的风格吗? [关闭]
Python调用外部程序——os.system()和subprocess.call()
如何结束作为 os.system() 调用运行的线程(Python)