<分区>
我在这里绞尽脑汁试图在不使用 shell=true 的情况下使用 python 执行一个简单的函数,但没有得到我需要的结果。我在 Linux 上使用 python 2.7。
我已经尝试了多种方法来做到这一点。如果我像这样使用 shell=true 它工作正常:
import subprocess as s
var1 = s.call("echo $HOME", shell=True)
和
import subprocess as s
var1 = s.check_output("echo $HOME", shell=True)
都返回
/home/myhost
...就像它应该的那样,但我尝试的其他一切都失败了。在大多数情况下,它似乎将我的变量作为字符串而不是命令传递。
这些是我用各种方法收到的结果:
import subprocess as s
print var1
返回
myhost@me:~/Desktop$ python home_test.py
File "home_test.py", line 42, in <module>
main()
File "home_test.py", line 11, in main
my_test()
File "home_test.py", line 16, in check_auth
var1 = s.check_output("echo $HOME")
File "/usr/lib/python2.7/subprocess.py", line 567, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
然后我试了一下:
import subprocess as s
var1 = s.Popen(['echo', '$HOME'], stdout=s.PIPE)
print var1
返回
myhost@me:~/Desktop$ python home_test.py
<subprocess.Popen object at 0x7f297ebcbf90>
myhost@me:~/Desktop$echo: write error: Broken pipe
然后这个:
import subprocess as s
cmd1 = '$HOME'
var1 = s.Popen(['/bin/echo', cmd1], stdout=s.PIPE)
print var1
返回
('$Home\n', None)
还有这个
import subprocess as s
cmd1 = 'HOME'
var1 = s.Popen(['/bin/echo', cmd1], stdout=s.PIPE)
print var1
返回
myhost@me:~/Desktop$ python home_test.py
('Home\n', None)
发现一些文档说使用 os... 也失败了,在发现它在 2.6 中已被弃用后这并不奇怪。
import os
var1 = os.popen('echo $HOME')
print var1
返回
<open file 'echo $HOME', mode 'r' at 0x7f1c6b26f6f0>
sh: echo: I/O error
然后我最后的尝试(实际上还有更多...但我们就此打住)
import subprocess as s
var1= s.Popen(["echo", "$HOME"], stdout=s.PIPE).communicate()[0]
print var1
返回:
myhost@me:~/Desktop$ python home_test.py
$HOME
有人可以指出我正确的方向吗?我花了一整天的时间摆弄这个,我需要帮助。预先感谢您提供的任何帮助。