我正在编写一个脚本,使用subprocess.Popen()
打开notepad.exeimport subprocess
command = '%windir%\system32\\notepad.exe'
process = subprocess.Popen(command)
output = process.communicate()
print(output[0])
抛出FileNotFoundError
是否可以更改/添加上述代码以使其适用于相对路径? 我确实尝试从C:\ Windows>运行脚本把它移到那里后再次失败了。同时设置shell = True,但也失败了。 使用os.popen()编写类似的脚本可以正常使用相对路径,无论脚本运行的是哪个目录,但据我所知,popen不是前进的方式..
编程/ Python世界的早期步骤。任何输入都非常赞赏。
答案 0 :(得分:1)
专业提示:每当您收到要求系统执行命令的错误时,请打印命令(如果适用,还打印当前工作目录)。结果通常会让你大吃一惊。
在你的情况下,我怀疑你只是错过反斜杠。请改用:
command = '%windir%\\system32\\notepad.exe'
在进行更改之前,请尝试在分配后立即打印command
的值。我想你会发现“系统”中的主要“s”缺失了,错误很明显。
HTH。
答案 1 :(得分:1)
使用os.path.expandvars
展开%windir%
:
command = os.path.expandvars('%windir%\\system32\\notepad.exe')
结果是一条路径,然后可以传递给subprocess.Popen
。
subprocess.Popen
不会扩展%windir%
等环境变量。 shell可能但你真的不应该依赖shell=True
来做到这一点。
答案 2 :(得分:0)
您可以使用原始字符串来避免必须加倍反斜杠。
command = r'%windir%\system32\notepad.exe'