指定すると標準出力をキャプチャでき、同様に標準エラーもstderrでキャプチャできます。文字列ではなくバイト列であることに注意してください。文字列とバイト列は混ぜることはできません。明示的にデコードしてください。この際、たいていの場合はバイト列のエンコードはUTF-8になっています。古い環境などではUTF-8ではないこともあり、決め打ちはできません。sys.getfilesystemencoding()で取得してください。環境変数やカレントディレクトリを変更する追加の引数で環境変数やカレントディレクトリを変更することができます。ファイルオブジェクトを渡すことができます。同じ引数を受け取りますが、実行を待ちません。(外部コマンドを起動し、終了を待つ)重い処理を並列実行するときなど、外部コマンドを複数起動(spawn)し、最後に全てのコマンドの終了を待つことがあります。subprocess.Popen(['/path/to/heavy-sub-process2'])p1.wait()p2.wait()なお、spawnした外部コマンドの出力を受け取ったり、外部コマンドの実行中に別の処理を実行したくなるかもしれません。それは非同期処理の世界に足を踏み込む事になりますので、subprocessではなくasyncioを使ってください。外部コマンドをシェルを介さずに実行します。引数にパイプやリダイレクトを書いても動作しません。指定すると、引数をシェルを介して実行することができます。OSコマンドインジェクションの原因になり危険です。実際には脆弱性にはならない(ユーザーの入力を.runに渡していない)としても、あなたのスクリプトを引き継いだ人や静的チェックツールには分からないかもしれませんから、避けた方が無難です。文字列表記の時刻の変換と、経過秒数の算出はよく行うと思います。かかった秒数Pythonではdatetimeを使います。あることに注意してください。かかった秒数(小数)他にも様々な機能があります。使って、ほとんど同じことができます。変数だけでなく、式であればどんなものも書くことができます。ヒアドキュメントはありませんが、複数行文字列(3重の引用符で囲む)があります。行頭の空白を削除してくれるので、文字列の中身をインデントして書くことができます。リストとして受け取れます。ありますが、後々を考えてargparseにしておきましょう。結果を.parse_args()で取得ということだけ覚えれば、他は必要に応じてドキュメントを読めばなんとかなります。終了時の処理&シグナルをtrapする一時ファイルを削除したりするのに使います。