【问题标题】:subprocess.popen not able to run command [duplicate]subprocess.popen 无法运行命令 [重复]
【发布时间】:2021-08-19 19:32:43
【问题描述】:

我有一个位于C:\Users\srinivast6>C:\Users\srinivast6\Documents\Cipia\Cipia\DriverSenseCLI-v7.4.3-win64 的exe。 这个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。我实际上不能对用户进行限制

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

【问题讨论】:

  • @CharlesDuffy,感谢您的意见。这有帮助。更改目录后,它工作了
  • 请参阅问题顶部“此问题已在此处找到答案”部分中的链接。
  • 是的,这解决了我的问题。我现在应该删除这个问题吗?
  • 没有义务——它最终会被自动删除,除非它获得足够的浏览量或赞成票以向系统表明它应该保持打开状态(作为帮助人们找到问题的典型实例)。就此而言,获得赞成的答案可能会阻止您自行删除;我不记得声誉等级在哪里放宽了该规则..

标签: python python-3.x subprocess python-3.8


【解决方案1】:

需要分享更多信息,但对可能发生的情况的猜测是,您正在从通常执行 myApplication.exe 的目录以外的目录执行 python 脚本,并且调用在 @ 中打开文件987654324@ 正在使用相对路径(这里似乎就是这种情况)。这意味着当您使用 Popen 执行 myApplication 时,它会将工作目录设置为您执行 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

或者,将传递的路径更改为在myApplication.py 中打开:

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

【讨论】:

  • 路径正确。事实上,如果路径不正确,它会抛出 filenotfiunderror,这不是我的场景。
  • @srinivast6 问题不在于可执行文件的路径是否正确。问题是 当前工作目录 是否正确,因为它是相对于正在启动的程序将查找其文件的那个目录(而不是相对于可执行文件的位置)。
  • @topoly,...请注意How to Answer 中关于“之前已经多次被问及回答过”的问题的指导——这就是为什么这个问题被视为重复而被关闭的原因。这使我们可以将答案集中在一个地方,并专注于使它们尽可能高质量;如果此答案在stackoverflow.com/questions/1685157/… 的链接副本中添加了任何现有答案中不存在的信息,请考虑将其移至那里。
  • @CharlesDuffy,哎呀,我刚刚注意到答案被标记为重复。
  • 公平地说,直到 OP 跟进明确这确实是他们当前工作目录错误导致的问题。
猜你喜欢
  • 2013-08-11
  • 2019-08-02
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
  • 2021-05-30
  • 2016-11-09
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多