ホームページ  >  記事  >  バックエンド開発  >  Pythonでシェルを実行する2つの方法のまとめ

Pythonでシェルを実行する2つの方法のまとめ

高洛峰
高洛峰オリジナル
2017-02-07 17:20:041239ブラウズ

1. Python の組み込みコマンド モジュールを使用してシェルを実行します

コマンドは Python の os.popen() をカプセル化し、パラメータとして SHELL コマンド文字列を使用し、コマンドの結果データとコマンド実行のステータスを返します。

このコマンドは現在放棄され、サブプロセスに置き換えられています。

# coding=utf-8
'''
Created on 2013年11月22日
  
@author: crazyant.net
'''
import commands
import pprint
  
def cmd_exe(cmd_String):
  print "will exe cmd,cmd:"+cmd_String
  return commands.getstatusoutput(cmd_String)
  
if __name__=="__main__":
  pprint.pprint(cmd_exe("ls -la"))

2. Python の最新のサブプロセス モジュールを使用してシェルを実行します

Python は現在、os.system、os.spawn*、os.popen* を放棄しています。 、popen2.*、コマンド *他の言語でコマンドを実行するには、サブプロセスを使用することをお勧めします。

サブプロセスを作成するときに、サブプロセスと入力、出力、およびエラー出力パイプを指定できます。サブプロセスを実行し、実行後の出力結果と実行ステータスを取得できます。

# coding=utf-8
'''
Created on 2013年11月22日
  
@author: crazyant.net
'''
import shlex
import datetime
import subprocess
import time
  
def execute_command(cmdstring, cwd=None, timeout=None, shell=False):
  """执行一个SHELL命令
      封装了subprocess的Popen方法, 支持超时判断,支持读取stdout和stderr
      参数:
    cwd: 运行命令时更改路径,如果被设定,子进程会直接先更改当前路径到cwd
    timeout: 超时时间,秒,支持小数,精度0.1秒
    shell: 是否通过shell运行
  Returns: return_code
  Raises: Exception: 执行超时
  """
  if shell:
    cmdstring_list = cmdstring
  else:
    cmdstring_list = shlex.split(cmdstring)
  if timeout:
    end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
   
  #没有指定标准输出和错误输出的管道,因此会打印到屏幕上;
  sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096)
   
  #subprocess.poll()方法:检查子进程是否结束了,如果结束了,设定并返回码,放在subprocess.returncode变量中
  while sub.poll() is None:
    time.sleep(0.1)
    if timeout:
      if end_time <= datetime.datetime.now():
        raise Exception("Timeout:%s"%cmdstring)
       
  return str(sub.returncode)
  
if __name__=="__main__":
  print execute_command("ls")

Popen で stdin と stdout を変数として指定して、出力変数の値を直接受け取ることもできます。

概要

例えば、Python のスレッドメカニズムを使用してさまざまなシェルプロセスを開始する必要がある場合があります。現在、サブプロセスは Python の最も多くの機能をサポートしており、すべての人に推奨されています。使用。

それでは、この記事の内容が皆さんの学習や仕事に少しでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。

Python でシェルを実行する 2 つの方法をまとめたその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。