Externe Befehlsausführung in Python

@ Shared Server / Umgebung ohne pyenv oder anaconda

Googeln, was "IPC :: Open3" entspricht. ↓

Unterprozess wird empfohlen.

Jedoch,,,

In der Python 2-Serie wird der Standard nicht verwendet, und es wird klar angegeben, dass subprocess32 verwendet werden kann.

Was ist das? Ich wünschte, ich könnte es normal ersetzen.

Ich habe keine Root-Rechte, also benutze pip, um es lokal einzugeben.

Installation von subprocess32

Natürlich sollte die Version von Python 2 Serien sein.

python


$ pip install --install-option="--prefix=$HOME/share" subprocess32
#$ export PYTHONPATH=$HOME/share/lib64/python2.6/site-packages:

Ändern Sie also den Bibliotheksaufruf zwischen 2 und 3

python


import sys
import platform
py_version = platform.python_version_tuple()[0]

if  py_version == 2:
    sys.path.append('/home/bunzaemon/share/lib64/python2.6/site-packages')
    from subprocess32 import Popen, PIPE
else:
    from subprocess   import Popen, PIPE

Ich denke, es ist eher wie "Python", "try" zu verwenden, aber ...

Popen

Popen

Gib es zurück. Es kann nicht richtig behandelt werden, es sei denn, es wird in Zeichenfolge [^ 2] geändert.

[^ 2]: Das Skript wird nur übergeben, wenn decode (" utf-8 ") ausgegeben wird, obwohl utf-8 nicht @ Python2.6.6 ausgegeben wird

python


cmd  = 'ls -al'
p = Popen(cmd.split(), stdout=PIPE, stderr=PIPE)
out = ( p.communicate()[0].split("\n")            if py_version == 2 else
        p.communicate()[0].decode("utf-8").split("\n") )

for line in out:
    print (line)

Fehler in comunicate () [1].

Sie können es normalerweise wie "IPC :: Open3" verwenden, aber vorerst gewöhnen wir uns an die empfohlene "Kommunikation".

Alle Quellen

python


#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Bibliotheken importieren
import sys
import platform

py_version = platform.python_version_tuple()[0]
if  py_version == 2:
    sys.path.append('/home/bunzaemon/share/lib64/python2.6/site-packages')
    from subprocess32 import Popen, PIPE
else:
    from subprocess   import Popen, PIPE

cmd  = 'ls -al'
p = Popen(cmd.split(), stdout=PIPE, stderr=PIPE)
out = ( p.communicate()[0].split("\n")            if py_version == 2 else
        p.communicate()[0].decode("utf-8").split("\n") )

for line in out:
    print (line)

Recommended Posts

Externe Befehlsausführung in Python
Führen Sie externe Befehle mit Python aus
Überprüfen Sie, ob in Python externe Befehle vorhanden sind (z. B. `which`).
Suchen Sie mit Python nach externen Befehlen
Führen Sie den Shell-Befehl / Python in R aus
Messen Sie die Ausführungszeit von Funktionen in Python
Im Python-Befehl zeigt Python auf Python3.8
Führen Sie das Python-Unittest-Modul in vs2017 aus
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Metaanalyse in Python
Debug-Schrittausführung in Python (Bottle, Intellij)
Unittest in Python
[LLDB] Erstellen Sie Ihren eigenen Befehl mit Python
Lernen Sie das Entwurfsmuster "Befehl" in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
Schritt AIC in Python
Zerlegen Sie Befehlsargumente in einer Zeile in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Parallele Taskausführung mit concurrent.futures in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Vorlage zum Erstellen von Befehlszeilenanwendungen in Python
So empfangen Sie Befehlszeilenargumente in Python
Erhalten Sie Tastenanschläge während der Hintergrundausführung in Python (Windows)
Laden Sie den Befehl von yml mit Python und führen Sie ihn aus
Befehlsausführung ausgelöst durch Dateiaktualisierung (Python Edition)
Täglicher AtCoder # 36 mit Python
Clustertext in Python