Python 无法从命令行访问NamedTemporaryFile
我有以下(简化)代码: 它因以下错误而死亡:Python 无法从命令行访问NamedTemporaryFile,python,linux,unix,Python,Linux,Unix,我有以下(简化)代码: 它因以下错误而死亡: Traceback (most recent call last): File "decrypt_resource.py", line 70, in <module> unpack(sys.argv[2]) File "decrypt_resource.py", line 28, in unpack print(subprocess.check_output(cmd)) File "/usr/lib/pytho
Traceback (most recent call last):
File "decrypt_resource.py", line 70, in <module>
unpack(sys.argv[2])
File "decrypt_resource.py", line 28, in unpack
print(subprocess.check_output(cmd))
File "/usr/lib/python2.7/subprocess.py", line 568, 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 1308, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
回溯(最近一次呼叫最后一次):
文件“decrypt_resource.py”,第70行,在
解包(sys.argv[2])
解包中第28行的文件“decrypt_resource.py”
打印(子流程检查输出(cmd))
文件“/usr/lib/python2.7/subprocess.py”,第568行,在check_输出中
进程=Popen(stdout=PIPE,*popenargs,**kwargs)
文件“/usr/lib/python2.7/subprocess.py”,第711行,在__
错误读取,错误写入)
文件“/usr/lib/python2.7/subprocess.py”,第1308行,在执行子进程中
引发子对象异常
OSError:[Errno 2]没有这样的文件或目录
但是,如果我使用NamedTemporaryFile(delete=False)
然后打印并执行该命令,它就会工作。这里怎么了
我的系统是带有
3.9.5-1-ARCH
内核的ArchLinux。您使用的子进程.call()
不正确
传入参数列表:
subprocess.call(["/usr/bin/7z", "x", f.name])
参数不是由shell处理的,也不像shell那样被解析出来。这是一件好事,因为它可以防止不受信任的命令行参数出现安全问题
您的其他选项包括使用来为您进行空格拆分,或者,作为最后一种手段,告诉
子流程
使用shell作为带有shell=True
标志的命令。请参阅关于启用shell的说明。哦,我真是个白痴!我忘记了shell=True
。我回到你的(更好的)列表解决方案,它工作得非常好。谢谢你的快速回复。
subprocess.call(["/usr/bin/7z", "x", f.name])