我正在尝试使用shell命令从中提取变量,我想在我的python程序的其余部分中使用它。例如,此代码尝试使用subprocess.call
和os.system
。前者给我一个错误,而后者没有产生任何东西,而如果我在shell命令中不使用变量,两者都工作正常。
import subprocess
import os
# ...
x="05/May/2017"
print 'Date =',x
subprocess.call(['echo Hello World from method 1'], shell=True)
os.system('echo Hello World from method 2')
print "Month from method 1 ="
subprocess.call(['echo $x | cut -f2 -d/'])
print "Month from method 2 ="
m=os.system('echo $x | cut -f2 -d/')
print m
问题在哪里,我该如何克服这个问题?
答案 0 :(得分:0)
问题是python变量没有传递给子进程(shell命令)。
简单的解决方案:
m=subprocess.getoutput('echo %s | cut -f2 -d/' % (x,))
'echo %s | cut -f2 -d/' % (x,)
将首先使用变量x的内容替换'%s',然后调用
subprocess.getoutput('echo 05/May/2017 | cut -f2 -d/')
答案 1 :(得分:0)
如果要将环境变量传递给子流程,则必须将其显式添加到os.environ
,如下所示。另一种选择是创建一个新环境并将其传递给.call
。
import subprocess;
import os;
os.environ['foo'] = "bar";
subprocess.call('echo $foo', shell=True);
在上述情况下,您还需要shell=True
,否则subprocess.call
会查找字面上称为echo $foo
的可执行文件。
当然我们可以手动设置命令行参数:
foo = "bar";
subprocess.call(['echo', foo]);
但是它不是环境变量。
至于你正在进行的实际调用,我希望你只是为了实验而运行cut
作为子进程,这样的字符串处理在Python脚本本身会更好。 子>