引数付きのコマンドを実行する次のコードがあります
subprocess.call(["schtasks.exe", "/Query","/V","/FO","csv",">>", r"D:/temp/fo3.csv"])
ただし>>
、引数の一部に問題があります。コマンドが気に入らないようです。次のメッセージが表示されます
ERROR Invalid argument /option - >>
だから私の質問は、どうすれば>>
引数を機能させることができますか?
引数付きのコマンドを実行する次のコードがあります
subprocess.call(["schtasks.exe", "/Query","/V","/FO","csv",">>", r"D:/temp/fo3.csv"])
ただし>>
、引数の一部に問題があります。コマンドが気に入らないようです。次のメッセージが表示されます
ERROR Invalid argument /option - >>
だから私の質問は、どうすれば>>
引数を機能させることができますか?
そのようなリストとして引数を渡すと、サブプロセスは各引数をプログラムに渡します。おそらく起こっていることは、あなたのプログラム(schtasks.exe
)が引数>>
を見ていて、それをどうするかを知らないということです。これをシェルで実行すると、>>
シェルによってリダイレクトとして解釈されるため、プログラムはそれを認識しません。
2つのオプションがあり、引数を文字列として渡し、を使用しますshell = True
。これは、サブプロセスに渡す文字列を変更する可能性のあるユーザー入力を受け入れる場合はお勧めしません。プログラムのセキュリティリスクにつながる可能性があるためです。
2番目のオプションは、開いているファイルオブジェクトをに渡すことですstdout
。
f = open(r"D:/temp/fo3.csv",'a')
subprocess.call(["schtasks.exe", "/Query","/V","/FO","csv"], stdout = f)
出力リダイレクト(>>
)はシェル機能であり、プログラムを直接呼び出すと機能しません。通話で使用shell=True
します。