如何使用子进程模块(即call
,check_call
和Popen
)运行多个命令?
例如,假设我想快速执行两次执行ls
命令,以下语法不起作用
import subprocess
subprocess.check_call(['ls', 'ls'])
收益:
CalledProcessError: Command '['ls', 'ls']' returned non-zero exit status 2.
你可以使用&&
或;
:
$ ls && ls
file.txt file2.txt
file.txt file2.txt
$ ls; ls
file.txt file2.txt
file.txt file2.txt
区别在于,在&&
的情况下,第二个命令将仅在第一个命令成功时执行(尝试false && ls
),与;
不同,在这种情况下,命令将独立于第一次执行而执行。
所以,Python代码将是:
import subprocess
subprocess.run(["ls; ls"], shell=True)
只需执行两次命令。
import subprocess
subprocess.check_call(['ls'])
subprocess.check_call(['ls'])
这应该足够快。
编辑
如果要在同一个shell中执行两个命令,请编写执行它们的shell脚本并从Python运行此脚本。
以下代码可行。但是两次执行ls命令不是更好吗?
import subprocess
subprocess.Popen(["ls;ls"],shell=True)