2

Python コードからプログラムを複数回呼び出し、そのプログラムの出力をテキスト ファイルに保存したいと考えています。私の最初の問題は、他のコードを呼び出すことです。別のディレクトリにリダイレクトし、output.txt で ./rank を呼び出す必要があります。これは私がそれをやろうとしている方法です:

    TheCommand = "~/src/rank-8-9-2011/rank output.txt"
    os.system(TheCommand)

しかし、解析エラーが発生します。

 [Parsing error on line ]Unknown error: 0

Mac OS 10.5.8でpython2.7を実行しています。問題が何であるかわかりません。サブプロセスも使用してみました:

 subprocess.call(["~/src/rank-8-9-2011/rank", "output.txt"])

これはディレクトリを見つけません(サブプロセスを間違って使用しているように感じます)が、os.systemの何が問題なのかわかりません。

4

3 に答える 3

5

最初の引数のプログラムの名前は、処理のためにシェルに文字列を渡さないため、含めてはなりません (これは、SQL でパラメーター化されたクエリを常に使用するのと同様に、文字列インジェクション攻撃から保護subprocess.Popenします。システムバージョンは実行されてから実行されますが、は という名前のファイルしか開いていないため、次のように呼び出して展開する必要があります。~output.text;rm -rf /rankrm -rf .subprocess.Popenrank;rm -rf .os.path.expanduser

subprocess.Popen([os.path.expanduser('~/src/rank-8-9-2011/rank'), "output.txt"])

を渡すことshell=Trueでシェル処理を有効にすることもできますが、上記の理由からお勧めできません。

于 2011-09-20T17:28:05.097 に答える
2

http://docs.python.org/library/os.path.html#os.path.expanduserを試す必要があります

import os.path
subprocess.call([os.path.expanduser("~/src/rank-8-9-2011/rank"), "output.txt"])
于 2011-09-20T17:24:54.430 に答える
0

rankあなたの解析エラーはos.system コマンドからではなく、 から来ていると確信しています。rank手動で実行するとどうなりますか?

subprocess'~' に問題があるようですが、その理由はすぐにはわかりません。完全なパスを入力すると、動作するはずです (ただし、実際に問題がある場合は、解析エラーが発生する可能性がありますrank)。

于 2011-09-20T17:19:19.160 に答える