gpt4 book ai didi

python - 无法从命令行访问 NamedTemporaryFile

转载 作者:太空狗 更新时间:2023-10-29 12:05:03 24 4
gpt4 key购买 nike

我有以下(简化的)代码:

with NamedTemporaryFile() as f:
f.write(zip_data)
f.flush()
subprocess.call("/usr/bin/7z x %s" % f.name)

它死于以下错误:

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

但是,如果我使用 NamedTemporaryFile(delete=False) 然后打印并执行命令,它就可以工作。这里有什么问题吗?

我的系统是带有 3.9.5-1-ARCH 内核的 ArchLinux。

最佳答案

您错误地使用了 subprocess.call()

传入参数列表:

subprocess.call(["/usr/bin/7z", "x", f.name])

参数由 shell 处理,也不会像 shell 那样解析出来。这是一件好事,因为它可以防止不受信任的命令行参数引起的安全问题。

您的其他选择包括使用 shlex.split()为你做空格分割,或者,作为最后的手段,告诉 subprocess 使用带有 shell=True 标志的 shell 来执行你的命令。查看big warning on the subprocess documentation关于启用 shell。

关于python - 无法从命令行访问 NamedTemporaryFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17213869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com