python - 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
?
解决方案
需要共享更多信息,但对可能发生的情况的猜测是,您正在从通常执行的目录以外的目录执行 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')
推荐阅读
- java - Android资源编译失败(Android Studio ver. 3.2.1)
- groovy - ODI 12C 中的 SNP_POP 等效项?
- javascript - 使用 ajax 调用调用 Outlook API 以将事件添加到 Outlook 日历
- typescript - 如何在使用 Vue CLI@3 和 TypeScript 设置的项目中使用?
- php - 如何使 PHP 功能变得安静的 web 服务?
- python - 通过读取稀疏矩阵创建节点和边
- javascript - jsfiddle 中的 React 代码问题。帮帮我
- laravel - 在 Laravel 中如何在特定字段旁边显示错误消息?
- python - 输入返回零的 readlines 函数
- java - 如果布尔变量为真,如何让程序打印?