在我的终端中,如果我运行:echo $(pwd)
,我得到了/home/abr/workspace
,但当我尝试在python中运行这个脚本时,这样:
>>> import subprocess
>>> cmd = ['echo', '$(pwd)']
>>> subprocess.check_output(cmd, shell=True)
我得到'\n'
。如何解决这个问题?
答案 0 :(得分:1)
使用A
包:
B
答案 1 :(得分:1)
试试这个:
cmd = 'echo $(pwd)'
subprocess.check_output(cmd, shell=True)
在subprocess
doc中,它指定在cmd
时shell=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'
就个人而言,我很难理解你想要做什么,但我希望这有助于解决它。