subprocess.Popen 和相关目录

subprocess.Popen and relative directories

我正在编写脚本以使用 subprocess.Popen()

打开 notepad.exe
import subprocess 
command = '%windir%\system32\notepad.exe'
process = subprocess.Popen(command)
output = process.communicate()
print(output[0])

这会引发 FileNotFoundError

是否可以 change/add 上述代码使其与相对路径一起工作? 我确实尝试 运行 从 C:\Windows> 将脚本移到那里,但再次失败。还设置了 shell=True,但也失败了。 使用 os.popen() 编写类似的脚本可以在相对路径下正常工作,无论脚本 运行 来自哪个目录,但据我了解 popen 不是前进的方向..

programming/Python 世界的早期步骤。非常感谢任何输入。

专业提示:每当您遇到要求系统执行命令的错误时,打印该命令(如果适用,还打印当前工作目录)。结果往往会让你大吃一惊。

对于你的情况,我怀疑你只是少了一个反斜杠。改用这个:

command = '%windir%\system32\notepad.exe'

在进行更改之前,尝试在分配后立即打印 command 的值。我想您会发现 "system" 中的前导 "s" 丢失了,而且错误很明显。

HTH。

使用os.path.expandvars扩展%windir%:

command = os.path.expandvars('%windir%\system32\notepad.exe')

结果是一个路径,然后可以传递给 subprocess.Popen

subprocess.Popen不展开%windir%等环境变量。 shell 可能但你真的不应该依赖 shell=True 来做到这一点。

您可以使用原始字符串来避免将反斜杠加倍。

command = r'%windir%\system32\notepad.exe'