我有一个我写的python脚本是从命令行中调用的。我正在编写GUI包装器,但不想更改主要功能。在GUI代码中,我使用subprocess.run(['./executable.py', input])
调用脚本,但是在executable.py
的sys.argv
列表中,输入不可见。我如何通过输入,以使sys.argv
可以看到它?
这是我保存为test.py
(使其可执行chmod +x test.py
(的测试脚本:
#!/usr/bin/env python
# script to test using sys.argv with subprocess
import sys
print(sys.argv)
这是我从命令行调用它时得到的:
$> ./test.py input.txt
['./test.py', 'input.txt']
这是我从python shell中调用它的东西:
>>> import subprocess
>>> output = subprocess.run(['./test.py', 'input.txt'], shell=True, stdout=subprocess.PIPE)
>>> >>> print(output.stdout)
b"['./test.py']n"
如何让input.txt
出现在sys.argv
?
最安全的方法就是简单地删除 shell=True
:
>>> import subprocess
>>> output = subprocess.run(['./test.py', 'input.txt'], stdout=subprocess.PIPE)
>>> print(output.stdout)
b"['./test.py', 'input.txt']n"
另一个选项是将输入列表组合到一个字符串中:
>>> import subprocess
>>> output = subprocess.run('./test.py input.txt', shell=True, stdout=subprocess.PIPE)
>>> print(output.stdout)
b"['./test.py', 'input.txt']n"
我不完全确定为什么原始方法(带有输入和shell=True
失败的列表(失败。无论如何,要避免运行意外命令/代码,最好避免使用shell=True
(请注意何时使用shell=True
(。