我正在尝试从用户读取输入并将其通过python2.7中的subprocess.check_output
存储在变量中。但是当我尝试运行它时,它会显示错误OSError: [Errno 2] No such file or directory
。还要注意,出于安全考虑,我严格希望使用shell=False
。
我已经尝试过subprocess.Popen
,但它也无法正常工作。
我尝试使用sys.stdin = open('/dev/tty', 'r')
和stdin=subprocess.PIPE
,但给出与上述相同的错误。
>>> import sys
>>> import subprocess
>>> sys.stdin = open('/dev/tty', 'r')
>>> cmd = ('read userinput && echo "$userinput"')
>>> confirmation = subprocess.check_output(cmd.split(), stdin=sys.stdin).rstrip()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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
预期结果是它应该请求用户输入并将其存储到confirmation
变量
答案 0 :(得分:0)
您正在输入shell命令(read
和echo
是shell内置的,而&&
是shell语法),因此您需要shell=True
。这是一个单一的shell命令,因此您无需使用split
。在这种情况下,python中命令的括号无效:
import sys
import subprocess
sys.stdin = open('/dev/tty', 'r')
cmd = 'read userinput && echo "$userinput"'
confirmation = subprocess.check_output(cmd, stdin=sys.stdin, shell=True).rstrip()
print'****', confirmation
礼物:
$ python gash.py
hello
**** hello