3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windows PowerShellクックブックをpythonスクリプトに置き換えてみた。

Posted at

これからの仕事でpythonが必要になるので、pythonスクリプトをたくさん作ってみることにしました。

環境:python3

#レシピ1 pythonで外部コマンドを実行するスクリプト

exec_shell.py
# coding: utf-8

"""使用法
exec_shell.py コマンドが記載されたxmlファイル
コマンドが記載されたxmlファイルのcommandタグをパースし、
パースしたコマンドを実行するスクリプト
"""

#モジュールインポート
from subprocess import Popen,PIPE
import xml.etree.ElementTree as et
import sys

#変数定義
cmdfile=sys.argv[1]
tree=et.parse(cmdfile)
cmd=tree.find(".//code").text

#関数定義
def main(cmd):
    p=Popen(cmd,shell=True,stdout=PIPE,stderr=PIPE)
    result=p.communicate()
    return result

#メイン処理
if __name__ == '__main__':
    result=main(cmd)
    print('標準出力結果: ' + str(result[0]))
    print('標準エラー出力結果: ' + str(result[1]))
    
    

##ポイント1 subprocessモジュールを利用した外部コマンドの実行
今は、「os.commands」を使用するのではなく、subprocessモジュールを利用するのが普通らしいですね。
subprocess.call()は、コマンドの戻り値しか扱えないみたいなので、Popenを使用することにします。

##ポイント2 外部コマンドの実行結果はタプル内に格納されています。
本スクリプトだと、result[0]に標準出力結果が、result[1]が標準エラー出力結果が格納されています。

##ポイント3 実行するコマンド
実行するコマンドは、リダイレクト等も含めて、cmd変数に入れています。これにより、コマンドが変わった場合はcmd変数のみ変えればよいことになります。

エラーハンドリングをもう少し追加する予定です。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?