Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用子流程运行带有标志的可执行文件_Python - Fatal编程技术网

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

Python 使用子流程运行带有标志的可执行文件,python,Python,我知道这个问题已经被问了很多次,我想我已经读过了每一个问题,但是我找不到我问题的答案。我正在尝试在windows XP计算机上运行一个可执行文件。可执行文件位于一系列文件夹中 C:\folder\program.exe 当我运行程序时,我需要包含一个标志和一个路径 program -f\path\to\file.txt 如果我浏览到该文件夹并使用cli运行上面的命令,则效果良好。我试图在python脚本中运行这个程序 我已经尝试了Subprocess.popen和Subprocess.cal

我知道这个问题已经被问了很多次,我想我已经读过了每一个问题,但是我找不到我问题的答案。我正在尝试在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])

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

>>> '\data\file.txt'
'\\data\x0cile.txt'
请注意,
\f
被转换为不同的字符。这是因为如果查看,您将看到
\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')

cli命令与使用
subprocess.Popen
执行的操作不同。您在popen中有一个额外的命令部分。它将是“program-f\data\file.txt C:\folder\\”,而您的cli命令仅为前两位。您可能对比原始子流程更易于使用的模块感兴趣。shell=True例如:subprocess.call([“C:\folder\program.exe”,cmd],shell=True)使用中间shell意味着变量、全局模式、,命令字符串中的其他特殊shell功能将在命令运行之前进行处理。谢谢你的快速回复,我尝试了你的答案,但还是一无所获。我还注意到我可以从它所在的文件夹中运行可执行文件,但我不能从其他任何地方运行它。我将它添加到PATH变量中,但仍然无法使其运行。这是否也是一个问题?谢谢您是否指定了程序的完整路径?如果没有,您应该将
cwd
参数设置为
subprocess.call
,它告诉它在尝试执行程序之前要进入哪个目录。添加了关于答案路径的信息。我认为调用的第三个参数是指定路径。我要换一下,试试看。是否应删除“C:\\folder\\”部分?thanksI认为这是你程序的一个论点。更新了答案。