首页 > 解决方案 > subprocess.popen 无法运行命令

问题描述

我有一个 exe 文件位于C:\Users\srinivast6>C:\Users\srinivast6\Documents\Cipia\Cipia\DriverSenseCLI-v7.4.3-win64. 这个 exe 我可以在终端(非管理员模式,Windows 操作系统)中运行,没有任何问题。

我使用subprocess.Popen如下方式以编程方式调用它。

process = subprocess.Popen(['myApplication.exe'])

但它给出了以下错误。它无法读取许可证文件。这可能是什么原因?我需要在管理员模式下打开它吗?

Cannot open license file : license.dat
License 284

Error initializing library:
license is not valid

EDIT1:将运行python脚本的目录更改为exe所在的目录后,我不再看到任何错误。它正在按预期启动。但我将这个 python 脚本打包为一个独立的可执行文件。所以用户可以使用任何目录中的这个可执行文件来启动myApplication.exe. 我实际上不能对 user 施加限制

那么是否可以以编程方式将当前工作目录设置为所在的路径myApplication.exe

标签: pythonpython-3.xsubprocesspython-3.8

解决方案


需要共享更多信息,但对可能发生的情况的猜测是,您正在从通常执行的目录以外的目录执行 python 脚本myApplication.exe,并且打开文件的调用myApplication使用的是相对路径(其中这里似乎是这种情况)。这意味着当您myApplication使用 Popen 执行时,它会将工作目录设置为您执行 python 脚本的任何位置的工作目录,并且相对路径将相对于该目录。如果是这种情况,请尝试从与您通常执行的目录相同的目录执行脚本,myApplication.exe或更改传递给文件打开调用的文件的路径myApplication以使用绝对路径。

例子:

Directory Structure

C:\Users\user
|--popen.py
|--somedir
   |--license.dat
   |--myApplication.exe
   |--myApplication.py

popen.py 的内容:

process = subprocess.Popen(['myApplication.exe'])

myApplication.py 的内容(我意识到 python 文件不会被编译为可执行文件,但这只是为了举例):

f = open('license.dat', 'r')

现在,这行不通:

cwd: C:\Users\user
$ python popen.py # File not found error.

从以下位置执行脚本somedir

cwd: C:\Users\user\somedir
$ python ..\popen.py

或者,将传递的路径更改为 open in myApplication.py

f = open('C:\Users\user\somedir\license.dat', 'r')

推荐阅读