我正在尝试在Windows中打开.txt
文件。代码如下:
subprocess.Popen("C:\folder\file.txt", shell=True)
这完全没问题。默认编辑器会自动打开并加载文件,但是,在通过shell调用调用(Windows中的cmd.exe)之前,我已经读过某个地方。没有它我怎么能这样做。只需设置shell=False
即可给出错误:
OSError: [WinError 193] %1 is not a valid Win32 application
现在,我可以尝试将其作为解决方法:
subprocess.Popen("notepad C:\folder\file.txt")
但这仅在记事本可用时才有效,因此失去了它的普遍性。
答案 0 :(得分:2)
如果您正在使用Windows,那么(非可移植)os.startfile
命令将获取文件路径并在该文件类型的默认应用程序中打开它。
在你的情况下你会这样做:
import os
os.startfile("C:\folder\file.txt")
请注意,此方法不会在Linux和Mac OSX上运行,您必须为此使用自己的实用程序。 (OSX为open
,Linux上为xdg-open
)并使用子进程启动它们。
答案 1 :(得分:1)
您尝试使用的功能是Windows cmd.exe的内置功能。因此,您需要设置shell = True参数。 cmd.exe知道如何处理您提交的文件。
如果你使用shell = False,你尝试像程序一样启动文件,因此没有任何反应,因为.txt文件没有exe-header。
在documentation中了解更多相关信息。
阅读further,你可以找到为什么使用shell = True参数可能是一个安全漏洞。如果您考虑按用户输入组合参数,则不应使用此参数,否则不会反对它。
无论如何,我建议使用你的第二个例子,因为它是明确的。你决定要开始的程序。
subprocess.Popen("notepad C:\folder\file.txt")