使用子进程运行带有标志的可执行文件

时间:2013-07-20 01:34:46

标签: python

我知道这个问题已被多次询问,我想我已经阅读过他们中的每一个但我无法找到我的问题的答案。我试图在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])

1 个答案:

答案 0 :(得分:3)

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

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

请注意,\f会变成另一个角色。那是因为如果查看table of escape characters,您会看到\f映射到ASCII Formfeed(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')