我知道这个问题已被多次询问,我想我已经阅读过他们中的每一个但我无法找到我的问题的答案。我试图在Windows XP机器上运行可执行文件。可执行文件位于一系列文件夹中。
C:\folder\program.exe
当我运行程序时,我需要包含一个标志和一个路径。
program -f\path\to\file.txt
如果我浏览到该文件夹并使用cli运行上面的命令,它可以正常工作。我试图从我的python脚本中运行该程序。
我已经尝试了Subprocess.popen
和subprocess.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])
答案 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')