问题是system
命令不起作用。它“有效”,但在一个立即退出的单独子进程中。当前目录不会传播到调用进程(此外,由于您没有检查返回代码,因此即使目录不存在,该命令也不会失败。请注意,它发生在这里,因为目录名称具有其中有空格且未引用...)。
你必须使用os.chdir
为此,但你甚至不需要它。
如果您想在特定位置运行命令,只需传递命令的绝对路径(并且由于它使用字符串文字,因此始终使用r
前缀以避免一些\t
or \n
字符被解释为特殊字符...)。例如,使用 python 3,使用提供的命令行会出现错误(但在 python 2 中没问题......):
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 5-6: truncated \UXXXXXXXX escape
所以总是使用原始前缀。我将这样重写:
current_dir = r"C:\Users\User\AppData\Windows\Start Menu\Programs"
subprocess.Popen(os.path.join(current_dir,"file.exe"))
如果您确实需要当前目录与 exe 相同,请使用cwd
范围。还得到返回值Popen
能够等待/轮询/杀死/无论什么并获取命令退出代码:
p = subprocess.Popen(os.path.join(current_dir,"file.exe"),cwd=current_dir)
# ...
return_code = p.wait()
附带说明一下,请注意:
p = subprocess.Popen("file.exe",cwd=current_dir)
不起作用,即使file.exe
is in current_dir
(除非你设置shell=True
,但出于安全/可移植性原因,最好也避免这种情况)
注意os.system
由于很多(好的)原因而被弃用。使用subprocess
模块,always,如果有争论,总是有争论list(不是字符串),并避免shell=True
越多越好。