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 に答える