2

我知道这个问题已经被问过很多次了,我想我已经阅读了其中的每一个,但我无法找到我的问题的答案。我正在尝试在 Windows XP 机器上运行可执行文件。可执行文件位于一系列文件夹中。

C:\folder\program.exe

当我运行程序时,我需要包含一个标志和一个路径。

program -f\path\to\file.txt

如果我浏览到该文件夹​​并使用 cli 运行上面的命令,它工作正常。我正在尝试从我的 python 脚本中运行这个程序。

我已经尝试了两者Subprocess.popensubprocess.call我似乎没有收到任何错误,但程序也没有执行。

有人对我还可以尝试什么有任何建议吗?谢谢

def Run(Path='\data\file.txt'):
  import subprocess, time

  cmd = '-f'+Path
  subprocess.Popen(["program", cmd, "C:\folder\\"])


def Run(Path='\data\file.txt'):
      import subprocess, time

      cmd = '-f'+Path
      subprocess.call(["C:\folder\program.exe", cmd])
4

1 回答 1

4

您在字符串中使用反斜杠。如果您不转义它们,它会尝试将反斜杠解释为转义字符。例如,您未转义的字符串:

>>> '\data\file.txt'
'\\data\x0cile.txt'

请注意,它\f变成了不同的字符。这是因为如果您查看转义字符表,您会看到它\f映射到 ASCII 换页符 (FF) 字符。你会想要逃避它们:

>>> '\\data\\file.txt'
'\\data\\file.txt'

或使用文字字符串:

>>> r'\data\file.txt'
'\\data\\file.txt'

例如,这里尝试重写您的Run函数:

import subprocess
import time

def Run(path='\\data\\file.txt'):
  flag = '-f%s' % path
  subprocess.call(['C:\\folder\\program', flag])

调用程序时应始终使用绝对路径。如果你只有一个相对于你的脚本的路径,你可以构造一个新的绝对路径,如下所示:

import os.path
script_dir = os.path.abspath(os.path.dirname(__file__))
cmd = os.path.join(script_dir, '\\relative\\path\\to\\program.exe')
于 2013-07-20T01:43:58.803 回答