subprocess.Popen和相对目录

时间:2016-11-12 23:34:39

标签: python subprocess popen

我正在编写一个脚本,使用subprocess.Popen()

打开notepad.exe
import 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世界的早期步骤。任何输入都非常赞赏。

3 个答案:

答案 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'