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])