【问题标题】:Can't I run file in temporary folder using subprocess?我不能使用子进程在临时文件夹中运行文件吗?
【发布时间】:2023-03-03 06:34:23
【问题描述】:

我试图在下面使用此代码...

**subprocess.Popen('%USERPROFILE%\\AppData\\Local\\Temp\\AdobeARM - Copy.log').communicate()**

但我收到一条错误消息。 有人可以帮忙吗?

【问题讨论】:

  • 您可以编辑您的问题以显示错误消息吗?我怀疑这是无法解释 USERPROFILE 环境变量的问题,但是,如果你有信息,为什么不提供呢?
  • 我们必须猜测您收到了什么错误消息吗? “一条错误消息”对我们没有任何帮助。
  • @cdarke:幸运的是我知道这个问题,但仍然很烦人......对于未来读者的网站问题质量没有帮助。想想他们!
  • @Jean-FrançoisFabre 很抱歉让你烦恼。
  • @cdarke 你是对的......这是我的错。对此我很抱歉

标签: python subprocess


【解决方案1】:

由于路径中有一个环境变量,您可以添加shell=True 以强制运行将评估环境的批处理过程。变量:

subprocess.Popen('"%USERPROFILE%\\AppData\\Local\\Temp\\AdobeARM - Copy.log"',shell=True).communicate()

注意用引号保护,因为有空格。如果将包含一个元素的列表传递给Popen,也可以去掉引号,这样更简洁:

subprocess.Popen(['%USERPROFILE%\\AppData\\Local\\Temp\\AdobeARM - Copy.log'],shell=True).communicate()

或者,如果您只想激活日志文件的默认编辑器,还有一种更简单的方法(不会阻止执行脚本,因此略有不同):

p = os.path.join(os.getenv('USERPROFILE'),r"AppData\Local\Temp\AdobeARM - Copy.log")
os.startfile(p)

也许它可以更简单,因为这可能是您尝试访问的临时目录:

p = os.path.join(os.getenv('TEMP'),r"AdobeARM - Copy.log")
os.startfile(p)

【讨论】:

  • 如果文件没有被使用(意味着锁定)!
  • 当然文件必须没有任何写锁。但是第一条消息(OP 未披露,不好的问题)是因为 Popen 从字面上解释 %USERPROFILE%
  • 不要在os.getenv()中使用%字符,这些字符只用于cmd,应该是os.getenv("USERPROFILE")os.getenv("TEMP")
  • @mata:当然!我没有测试就写了。固定。
  • @Jean-FrançoisFabre 感谢您对我的大力帮助。为我的坏问题道歉。
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 2015-08-28
  • 2014-10-30
  • 2022-11-03
  • 2011-01-26
  • 1970-01-01
  • 2016-07-27
  • 2015-10-25
相关资源
最近更新 更多