[解決済み] なぜシェルコマンドを直接実行するのではなく、Pythonのosモジュールメソッドを使用するのですか?
質問
ファイルやディレクトリの作成、ファイル属性の変更など、OS固有のタスクを実行するために、Pythonのライブラリ関数を使用する動機について理解しようとしています。
os.system()
または
subprocess.call()
?
例えば、なぜ
os.chmod
の代わりに
os.system("chmod...")
?
シェルコマンドを直接実行するのではなく、Pythonの利用可能なライブラリメソッドを可能な限り使用することが、より"pythonic"であることは理解しています。しかし、機能的な観点からこれを行う背後にある他の動機がありますか?
ここでは、単純な1行のシェルコマンドを実行することだけを話しています。タスクの実行をより細かく制御する必要がある場合は
subprocess
モジュールの方がより理にかなっている、など。
どのように解決するのですか?
-
それは より速く ,
os.system
とsubprocess.call
は新しいプロセスを作成しますが、このような単純なものには必要ありません。実際os.system
とsubprocess.call
と共にshell
最初のプロセスはシェルで、2 番目のプロセスは実行中のコマンドです (もし、それがtest
). -
いくつかのコマンドは 別プロセスで無駄 . 例えば
os.spawn("cd dir/")
を実行すると、子プロセスの現在の作業ディレクトリは変更されますが、Python プロセスの作業ディレクトリは変更されません。あなたはos.chdir
そのために -
特別な心配をする必要はありません という文字が解釈されます。 シェルによって
os.chmod(path, mode)
はファイル名が何であろうと動作しますがos.spawn("chmod 777 " + path)
のようなファイル名では、ひどい失敗をします。; rm -rf ~
. (なお、この問題はsubprocess.call
を使わずにshell
引数で指定します)。 -
を気にする必要はありません。 ダッシュで始まるファイル名 .
os.chmod("--quiet", mode)
という名前のファイルのパーミッションを変更します。--quiet
しかしos.spawn("chmod 777 --quiet")
は失敗します。--quiet
は引数として解釈されます。これはsubprocess.call(["chmod", "777", "--quiet"])
. -
が少なくなっていますね。 クロスプラットフォーム やクロスシェルに関する懸念は、Pythonの標準ライブラリが対処してくれることになっているからです。あなたのシステムには
chmod
コマンドを実行できますか?インストールされていますか?あなたが期待するパラメータをサポートしていますか?そのos
モジュールは可能な限りクロスプラットフォームであろうとし、それが不可能な場合はドキュメントを作成します。 -
実行中のコマンドに 出力 これは案外厄介で、移植性を気にしない場合でも、コーナーケース(スペース、タブ、改行が含まれるファイル名)を忘れてしまうことがあるからです。
関連
-
Python関数の高度な応用を解説
-
Python jiabaライブラリの使用方法について説明
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み】Pythonの「private」メソッドは、なぜ実際にはprivateではないのですか?
-
[解決済み】典型的なAngularJSのワークフローとプロジェクト構成(Python Flaskを使用した場合)
-
[解決済み] Pythonのmath.ceil()とmath.floor()はなぜ整数でなく浮動小数点数を返すのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python Decorator 練習問題
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
PicgoのイメージベッドツールをPythonで実装する
-
Python カメの描画コマンドとその例
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】Flaskのテンプレートが見つからない【重複あり