Pau*_*aul 32 python bash subprocess
如果我echo a; echo b
在bash中运行,结果将是两个命令都运行.但是,如果我使用subprocess,则运行第一个命令,打印出整个行的其余部分.下面的代码是echos a; echo b
而不是a b
,如何让它运行这两个命令?
import subprocess, shlex
def subprocess_cmd(command):
process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
proc_stdout = process.communicate()[0].strip()
print proc_stdout
subprocess_cmd("echo a; echo b")
Run Code Online (Sandbox Code Playgroud)
bou*_*gui 60
你必须在子进程中使用shell = True而没有shlex.split:
def subprocess_cmd(command):
process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
proc_stdout = process.communicate()[0].strip()
print proc_stdout
subprocess_cmd('echo a; echo b')
Run Code Online (Sandbox Code Playgroud)
收益:
a
b
Run Code Online (Sandbox Code Playgroud)
adm*_*nva 15
我偶然发现我需要在python中运行一堆bash代码行(不用分号分隔).在这种情况下,建议的解决方案没有帮助.一种方法是保存文件,然后运行它Popen
,但在我的情况下是不可能的.
我最终做的是:
commands = '''
echo "a"
echo "b"
echo "c"
echo "d"
'''
process = subprocess.Popen('/bin/bash', stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = process.communicate(commands)
print out
Run Code Online (Sandbox Code Playgroud)
所以我首先创建子bash进程,然后告诉它要执行什么.此方法消除了将命令直接传递给Popen
构造函数的限制.
小智 11
使用"&&"加入命令.
os.system('echo a > outputa.txt && echo b > outputb.txt')
Run Code Online (Sandbox Code Playgroud)