在 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 &amp;&amp; &lt;some command&gt;")

【讨论】:

【参考方案4】:

很简单,真的。 对于 Windows,使用 &amp; 分隔您的命令,对于 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)

Python 使用OS模块调用 cmd

python 中os.system() 调用命令超时后,如何停止

Python脚本随笔-py文件间的调用