Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung von zwei Methoden zum Ausführen einer Shell in Python

Zusammenfassung von zwei Methoden zum Ausführen einer Shell in Python

高洛峰
高洛峰Original
2017-02-07 17:20:041155Durchsuche

1. Verwenden Sie das integrierte Befehlsmodul von Python, um die Shell auszuführen.

Befehle kapseln Pythons os.popen(), verwenden die SHELL-Befehlszeichenfolge als Parameter und geben die Ergebnisdaten des Befehls zurück Status der Befehlsausführung. ;

Dieser Befehl ist derzeit veraltet und wird durch einen Unterprozess ersetzt;

# 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. Verwenden Sie das neueste Unterprozessmodul von Python 🎜>

Python Derzeit wurden os.system, os.spawn*, os.popen*, popen2.* und commands.* aufgegeben, um Befehle in anderen Sprachen auszuführen

Unterprozess ermöglicht das Erstellen Bei vielen Unterprozessen können Sie beim Erstellen den Unterprozess und seine Eingabe-, Ausgabe- und Fehlerausgabepipelines angeben. Nach der Ausführung können Sie die Ausgabeergebnisse und den Ausführungsstatus abrufen.

# 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")

Sie können in Popen auch stdin und stdout als Variablen angeben, sodass Sie den Wert der Ausgabevariablen direkt erhalten können.

Zusammenfassung

Manchmal ist es notwendig, SHELL in Python auszuführen, beispielsweise um den Thread-Mechanismus von Python zu verwenden, um verschiedene Shell-Prozesse zu starten. Derzeit ist der Unterprozess die offiziell empfohlene Methode von Python und den von ihm unterstützten Funktionen Es ist auch das beliebteste und wird jedem empfohlen.

Okay, das ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für alle beim Lernen oder bei der Arbeit hilfreich sein kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen.

Weitere verwandte Artikel, in denen die beiden Methoden zum Ausführen einer Shell in Python zusammengefasst werden, finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn