-1

Windows のコマンド プロンプトからプログラムを実行しようとしています。私はいくつかの問題を抱えています。コードは以下のとおりです。

commandString = "'C:\Program Files\WebShot\webshotcmd.exe' //url '" + columns[3] + "' //out '"+columns[1]+"~"+columns[2]+".jpg'"
os.system(commandString)
time.sleep(10)

したがって、単一引用符を使用すると、「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が正しくありません」と表示されます。一重引用符を \" に置き換えると、「'C:\Program' は有効な実行可能ファイルではありません」という意味になります。

構文エラーであることは認識していますが、これを修正する方法がよくわかりません....

column[3] には、Web ブラウザーから貼り付けられた完全な URL のコピーが含まれています (したがって、URL エンコードする必要があります)。column[1] には数字とピリオドのみが含まれます。column[2] にはいくつかのテキストが含まれ、二重引用符とコロンは置き換えられます。念のため申し上げると…

ありがとう!

4

2 に答える 2

2
  • Windows では、この状況で二重引用符が必要ですが、単一引用符を使用しました。
  • よりsubprocess堅牢os.systemで、シェルを直接呼び出さないようにするため、エスケープの問題を混乱させることを心配する必要はありません。
  • +長いひもをまとめるために使用しないでください。string %s" % (formatting,)読みやすく、効率的で、慣用的な文字列形式 ( ) を使用します。
  • この場合、とにかく長い文字列をシェル コマンドとして作成せず、リストを作成して に渡しsubprocess.callます。
  • 私が言える限りでは、スラッシュはエスケープしていますが、バックスラッシュはエスケープしていません。を含む文字列リテラル//は、作成する文字列に両方のスラッシュを含みます。os.pathいずれにしても、エスケープの解析による混乱を回避し、多くの場合、スクリプトの移植性を高めるモジュールを使用する必要はありません。
于 2010-02-17T17:12:42.470 に答える
1

システム コマンドを呼び出すには、 subprocessモジュールを使用します。また、一重引用符を削除して二重引用符を使用してみてください。

于 2010-02-17T16:47:02.643 に答える