python(3) からシェル コマンドを呼び出す最も安全で便利な方法を探しています。ここで ps から pdf への変換:
gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile="${pdf_file}" "${ps_file}"
を使用subprocess
し、shlex
避けshell=True
ます。しかし、結果のコマンドには一貫性がありません。
cmd = ['gs', '-dBATCH', '-dNOPAUSE', '-sDEVICE=pdfwrite', '-sOutputFile={0}'.format(pdf_filename), ps_filename]
何が恋しい?! subprocess.call()
構文は、スペースで区切られた引数で非常にきれいに見え、他の場所では混乱しているように見えます。
次の間で呼び出すときの違いは何ですかsubprocess.call(cmd)
(Pythonレベルで、つまり、エスケープ、インジェクション保護、引用など):
cmd = ['do', '--something', arg]
cmd = ['do', '--someting {0}'.format(arg)]
ない場合、これも良い方法ですか?
cmd = ['gs', '-dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile={0} {1}'.format(pdf_filename, ps_filename)]
矛盾の別の例:
hg merge -r 3
だろうcmd = ['hg', 'merge', '-r', revision_id]
hg merge --rev=3
だろうcmd = ['hg', 'merge', '--rev={0}'.format(revision_id)]
にもかかわらず、同じ引数を送るには 2 つの方法があります。