shell命令在我的终端,如果我跑:echo $(pwd)
,我/home/abr/workspace
,但是当我试图运行此脚本在Python这样的:无法运行与子
>>> import subprocess
>>> cmd = ['echo', '$(pwd)']
>>> subprocess.check_output(cmd, shell=True)
我得到'\n'
。如何解决这个问题?
shell命令在我的终端,如果我跑:echo $(pwd)
,我/home/abr/workspace
,但是当我试图运行此脚本在Python这样的:无法运行与子
>>> import subprocess
>>> cmd = ['echo', '$(pwd)']
>>> subprocess.check_output(cmd, shell=True)
我得到'\n'
。如何解决这个问题?
使用os
包:
import os
print os.environ.get('PWD', '')
试试这个:
cmd = 'echo $(pwd)'
subprocess.check_output(cmd, shell=True)
在subprocess
文档它指定cmd
应该是一个字符串shell=True
时。
从文档:
壳参数(默认为假)指定是否使用 壳作为要执行的程序。如果shell为True,建议将作为字符串传递,而不是作为序列传递。
一种更好的方式实现这一目标是可能使用os
模块从Python标准库,就像这样:
import os
print os.getcwd()
>> "/home/abr/workspace"
的getcwd()
函数返回代表当前工作目录的字符串。
这是正确的。如果你认为它增加了任何东西,我会考虑添加python已经建立了更好的替代方案,或者引用子进程上的文档:“但是,请注意Python本身提供了许多类似shell的功能的实现” –
@msn请考虑点击复选标记有助于接受答案。 – Forge
从subprocess
模块上的文档:
如果
args
是一个序列中,第一项指定的命令串,并 任何其他项将被视为附加的参数 外壳本身。
你想:
subprocess.check_output("echo $(pwd)", shell=True)
命令subpreocess.check_output
将返回命令的输出,你在呼唤: 例子:
#echo 2
2
蟒蛇
>>>subprocess.check_output(['echo', '2'], shell=True)
>>>'2\n'
的
'\ n'包含在内这是命令的作用,它打印输出sting,然后将电流放在一个新的行。
现在回到你的问题;假设你想输出'PWD',首先你必须摆脱shell。如果您提供shell参数,则该命令将在shell环境中运行,并且您将看不到返回的字符串。
subprocess.check_output(['pwd'])
将返回当前目录+“\ n”
就我个人而言,我也很难理解你正在尝试做的,但我希望这有助于解决这个问题。
为什么你会这样做而不是使用os包?似乎使用内置函数更容易,而不是依赖几乎肯定是os/privilege/system/configuration/terminal依赖的外部调用。 os.path.abspath(os.path.curdir)似乎很简单 –
如果您将鼠标悬停在问题文本下的[tag:subprocess]上;你应该看到标签的描述。点击说明下的“info”链接。 [我收集了一些又一次被问及的问题。如果你研究这些问题;您可能会避免将来使用'subprocess'模块时的常见问题](http://stackoverflow.com/tags/subprocess/info)。 – jfs