如何使用子流程模块(即call
,check_call
和Popen
)运行多个命令?
例如,假设我想快速连续执行两次ls
命令,以下语法不起作用
import subprocess
subprocess.check_call(['ls', 'ls'])
返回:
CalledProcessError: Command '['ls', 'ls']' returned non-zero exit status 2.
答案 0 :(得分:2)
只需执行两次命令即可。
import subprocess
subprocess.check_call(['ls'])
subprocess.check_call(['ls'])
那应该足够快。
修改
如果要在同一shell中执行两个命令,请编写一个执行它们的shell脚本,然后从Python运行该脚本。
答案 1 :(得分: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)
答案 2 :(得分:1)
下面的代码将起作用。但是只执行两次ls命令会更好吗?
import subprocess
subprocess.Popen(["ls;ls"],shell=True)