我尝试使用os.system库从本地python项目中的特定路径运行exe(在后台)。 我已经设法更改了“ cd”命令之类的文件夹,但是我无法运行该文件。
这是针对在Windows 64BIT,Python 3.5.3上运行的python项目
file.exe在“程序”目录中。
import os
os.system("cd C:\Users\User\AppData\Windows\Start Menu\Programs")
subprocess.Popen("file.exe")
错误:
{OSError} [WinError 193]%1不是有效的Win32应用程序
我看到了有关此问题的其他帖子,但无法解决。 有什么想法吗?
答案 0 :(得分:6)
问题是system
命令不起作用。它“起作用”,但是在一个单独的子过程中立即退出。当前目录不会传播到调用过程(另外,由于您没有检查返回码,即使目录不存在,该命令也不会失败。请注意,此操作在此发生,因为目录名包含里面有空格,没有引号...)。
您必须为此使用os.chdir
,但您甚至不需要它。
如果您想在特定位置运行命令,只需传递命令的绝对路径(并且由于它使用的是字符串文字,请始终使用r
前缀来避免使用某些\t
或{ {1}}字符被解释为特殊字符...)。例如,对于python 3,在提供命令行的情况下会出现错误(但是在python 2中可以...):
\n
因此,请始终使用原始前缀。这是我要重写的方式:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 5-6: truncated \UXXXXXXXX escape
如果确实需要当前目录与exe相同,请使用current_dir = r"C:\Users\User\AppData\Windows\Start Menu\Programs"
subprocess.Popen(os.path.join(current_dir,"file.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
中也不起作用(除非您设置了current_dir
,但出于安全性和便携性的考虑,最好还是避免这种情况)
请注意,shell=True
出于许多(良好)原因而被弃用。使用os.system
模块,始终 ,如果有参数,请始终使用参数 list (不是字符串),并尽量避免使用subprocess
可能。
答案 1 :(得分:2)
您能看看是否可行
import os
# change the current directory
# to specified directory
os.chdir(r"C:\Users\User\AppData\Windows\Start Menu\Programs")
subprocess.Popen("file.exe")
答案 2 :(得分:0)
问题解决了。 谢谢大家,问题是管理权限。.以管理员身份开始pycharm。 就像我说的那样-我能够通过os.listdir()看到文件,但是当我尝试运行它时,错误开始弹出。 我认为主要问题是os.system()从python进程继承当前权限。