Maison > développement back-end > Tutoriel Python > Résumé de deux méthodes d'exécution de shell en python

Résumé de deux méthodes d'exécution de shell en python

高洛峰
Libérer: 2017-02-07 17:20:04
original
1255 Les gens l'ont consulté

1. Utilisez le module de commandes intégré de python pour exécuter le shell.

les commandes encapsulent os.popen() de Python, utilisent la chaîne de commande SHELL comme paramètre et renvoie les données de résultat de la commande et du état de l'exécution de la commande. ;

Cette commande est actuellement obsolète et remplacée par subprocess;

# 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"))
Copier après la connexion

Utilisez le dernier module de sous-processus de python pour exécuter le shell<. 🎜>

Python Actuellement, os.system, os.spawn*, os.popen*, popen2.* et commands.* ont été abandonnés pour exécuter des commandes dans d'autres langages. Les sous-processus sont la méthode recommandée ; 🎜>le sous-processus vous permet de créer Pour de nombreux sous-processus, vous pouvez spécifier le sous-processus et ses canaux d'entrée, de sortie et de sortie d'erreur lors de leur création. Après l'exécution, vous pouvez obtenir les résultats de sortie et l'état d'exécution.

# coding=utf-8
&#39;&#39;&#39;
Created on 2013年11月22日
  
@author: crazyant.net
&#39;&#39;&#39;
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")
Copier après la connexion

Vous pouvez également spécifier stdin et stdout comme variable dans Popen, afin de pouvoir recevoir directement la valeur de la variable de sortie.

Résumé

Il est parfois nécessaire d'exécuter SHELL en python, par exemple en utilisant le mécanisme de thread de Python pour démarrer différents processus shell. Actuellement, le sous-processus est la méthode officiellement recommandée de Python et ses fonctions prises en charge. C’est également le plus populaire et son utilisation est recommandée à tous.

D'accord, c'est tout le contenu de cet article. J'espère que le contenu de cet article pourra être utile aux études ou au travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer.

Pour plus d'articles connexes résumant les deux méthodes d'exécution de shell en python, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal