在python中,我尝试运行一些命令,但是我无法使它工作,总结一下这个脚本应该通过subproscess执行四个简单命令,存储它们各自的输出然后显示它们。
#!/usr/bin/python
import subprocess
output_1 = None
output_2 = None
output_3 = None
output_4 = None
print "Start"
try:
output_1 = subprocess.check_output(["ls", "-al"], shell=True, stderr=subprocess.STDOUT)
output_2 = subprocess.check_output(["echo", "'Hi'"], shell=True, stderr=subprocess.STDOUT)
output_3 = subprocess.check_output(["echo", "\"Hi\""], shell=True, stderr=subprocess.STDOUT)
output_4 = subprocess.check_output(["echo", "Hi"], shell=True, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as ex:
print "Command '%s' return exit code %s:\n\n%s" % (ex.cmd, ex.returncode, ex.output)
print "Out 1: '%s'" % output_1
print "Out 2: '%s'" % output_2
print "Out 3: '%s'" % output_3
print "Out 4: '%s'" % output_4
我不明白为什么我的输出中没有'Hi'...这是我得到的输出:
Start
Out 1: '
test
undefined10_error.png
undefined20_error.png
undefined35_error.png
undefined40_error.png
'
Out 2: '
'
Out 3: '
'
Out 4: '
'
答案 0 :(得分:1)
传递shell=True
参数you are telling the interpreter to execute the command as a single string。这意味着第一个参数需要是一个字符串。如果您查看第一个命令的输出,您会注意到您没有获得标记am
,而只是标准ls
。
如果要使用shell=True
,请将参数作为str:
> subprocess.check_output("echo 'Hello World!'", shell=True, stderr=subprocess.STDOUT)
b'Hello World!\n'
如果您计划使用变量,则需要使用shelex.quote自行转义它们。
使用局部变量:
>>> import shlex
>>> local_variable = 'Hi \'world"'
>>> command = 'echo {}'.format(shlex.quote(local_variable))
>>> subprocess.check_output(command,shell=True, stderr=subprocess.STDOUT)
b'Hi \'world"\n'