Si vous voulez gérer les commandes shell en Python, vous utilisez généralement le module subprocess
. Il est possible de passer le résultat sous forme de liste en utilisant stdout.readlines ()
dans le module, mais si la commande shell à exécuter s'étend sur plusieurs lignes, le code de saut de ligne (saut de ligne) sera passé ensemble. Par conséquent, afin de transmettre la liste avec le code de saut de ligne (saut de ligne) supprimé, le traitement suivant doit être effectué.
Ici, nous allons expliquer en utilisant un exemple d'exécution de ls -l
à partir de Python en tant que commande shell.
Cette fois, j'ai créé trois scripts selon les trois méthodes suivantes.
En fait, l'exemple de résultat lorsque ls -l
est exécuté est le suivant.
$ ls -l
total 12
-rwxr-xr-x 1 root root 260 Jun 16 18:48 res_cmd_lfeed.py
-rwxr-xr-x 1 root root 378 Jun 16 18:49 res_cmd_no_lfeed.py
-rwxr-xr-x 1 root root 247 Jun 16 18:48 res_cmd.py
Obtenez le premier élément de tableau de communiquez ()
.
res_cmd.py
#!/usr/bin/python
import subprocess
def res_cmd(cmd):
return subprocess.Popen(
cmd, stdout=subprocess.PIPE,
shell=True).communicate()[0]
def main():
cmd = ("ls -l")
print(res_cmd(cmd))
if __name__ == '__main__':
main()
Comme indiqué ci-dessous, le résultat de l'exécution du script est le même que lorsque ls -l
est exécuté.
$ ./res_cmd.py
total 12
-rwxr-xr-x 1 root root 260 Jun 16 18:48 res_cmd_lfeed.py
-rwxr-xr-x 1 root root 378 Jun 16 18:49 res_cmd_no_lfeed.py
-rwxr-xr-x 1 root root 247 Jun 16 18:48 res_cmd.py
Utilisez stdout.readlines ()
.
res_cmd_lfeed.py
#!/usr/bin/python
import subprocess
def res_cmd_lfeed(cmd):
return subprocess.Popen(
cmd, stdout=subprocess.PIPE,
shell=True).stdout.readlines()
def main():
cmd = ("ls -l")
print(res_cmd_lfeed(cmd))
if __name__ == '__main__':
main()
Vous pouvez obtenir une liste de résultats incluant des sauts de ligne.
$ ./res_cmd_lfeed.py
['total 12\n', '-rwxr-xr-x 1 root root 261 Jun 16 18:52 res_cmd_lfeed.py\n', '-rwxr-xr-x 1 root root 380 Jun 16 18:52 res_cmd_no_lfeed.py\n', '-rwxr-xr-x 1 root root 248 Jun 16 18:51 res_cmd.py\n']
Utilisez stdout.readlines ()
et utilisez `rstrip (" \ n ") ʻen notation d'inclusion de liste.
res_cmd_no_lfeed.py
#!/usr/bin/python
import subprocess
def res_cmd_lfeed(cmd):
return subprocess.Popen(
cmd, stdout=subprocess.PIPE,
shell=True).stdout.readlines()
def res_cmd_no_lfeed(cmd):
return [str(x).rstrip("\n") for x in res_cmd_lfeed(cmd)]
def main():
cmd = ("ls -l")
print(res_cmd_no_lfeed(cmd))
if __name__ == '__main__':
main()
Vous pouvez obtenir une liste de résultats hors saut de ligne.
$ ./res_cmd_no_lfeed.py
['total 12', '-rwxr-xr-x 1 root root 261 Jun 16 18:52 res_cmd_lfeed.py', '-rwxr-xr-x 1 root root 380 Jun 16 18:52 res_cmd_no_lfeed.py', '-rwxr-xr-x 1 root root 248 Jun 16 18:51 res_cmd.py']
Recommended Posts