无法使用子进程运行shell命令

时间:2016-03-04 15:11:33

标签: python subprocess

在我的终端中,如果我运行:echo $(pwd),我得到了/home/abr/workspace,但当我尝试在python中运行这个脚本时,这样:

>>> import subprocess
>>> cmd = ['echo', '$(pwd)']
>>> subprocess.check_output(cmd, shell=True)

我得到'\n'。如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

使用A包:

B

答案 1 :(得分:1)

试试这个:

cmd = 'echo $(pwd)'
subprocess.check_output(cmd, shell=True)

subprocess doc中,它指定在cmdshell=True应为字符串。
来自文档:

  

shell参数(默认为False)指定是否使用   shell作为要执行的程序。如果shell为True,则为   建议将args作为字符串而不是序列传递。


实现这一目标的更好方法可能是使用python标准库中的os模块,如下所示:

import os
print os.getcwd()
>> "/home/abr/workspace"

getcwd()函数返回表示当前工作目录的字符串。

答案 2 :(得分:1)

来自subprocess模块的文档:

  

如果args是序列,则第一项指定命令字符串,   任何其他项目将被视为附加参数   外壳本身。

你想:

subprocess.check_output("echo $(pwd)", shell=True)

答案 3 :(得分:1)

命令subpreocess.check_output将返回您正在调用的命令的输出: 例如:

#echo 2
2

来自python

>>>subprocess.check_output(['echo', '2'], shell=True)
>>>'2\n'

包含'\ n',因为这是命令执行的操作,它打印输出sting,然后将当前信号放在新行上。

现在回到你的问题;假设你想要'PWD'的输出,首先你必须摆脱shell。如果提供shell参数,该命令将在shell环境中运行,您将看不到返回的字符串。

subprocess.check_output(['pwd'])

将返回当前目录+'\ n'

就个人而言,我很难理解你想要做什么,但我希望这有助于解决它。