2016-06-21 12 views
1

Ich versuche, so etwas zu tun:Wie kann ich auf eine Eingabeaufforderung in os.system antworten?

from subprocess import Popen 
p = Popen(["vagrant", "ssh", "vmname", "-c", '"pvcreate -ff /dev/sdb"']) 

Aber es erfordert Benutzereingabe. Das hat auch nicht funktioniert. Sie geben den Fehler: bash: pvcreate -ff /dev/sdb: command not found, weil es nach einem Programm pvcreate -ff /dev/sdb statt pvcreate mit Argumenten sucht. Ich habe auch versucht, diese erste:

p = Popen(["vagrant", "ssh", "vmname", "-c", "pvcreate", "-ff", "/dev/sdb"]) 

Und haben gegriffen, dies zu verwenden:

os.system("vagrant ssh vmname -c 'pvcreate -ff /dev/sdb'") 

Allerdings muss ich sagen, ja, wenn es mich auffordert. Ich habe diese Optionen bereits versucht, so gut:

os.system("yes | vagrant ssh vmname -c 'pvcreate -ff /dev/sdb'") 
os.system("echo y | vagrant ssh vmname -c 'pvcreate -ff /dev/sdb'") 

Ist es möglich, auf eine Aufforderung reagieren os.system mit?

+0

Mögliche Duplikate von [Gib Antwort Ja/Nein in Python, wenn ein Befehl os.system() in Python Linux ausgeführt wird] (http://stackoverflow.com/questions/28662107/give-response-yes-no-in -python-wenn-ein-Befehl-ist-ausgeführt-os-system-in-python) – zondo

+0

Ich fühle mich wie keiner von euch die Frage gelesen. Was mache ich falsch mit 'Popen'? Ich bekomme diesen Fehler 'bash: pvcreate -ff/dev/sdb: Keine solche Datei oder dieses Verzeichnis'. Ich bin mir auch nicht sicher, warum ich downvoted werde, ich habe zahlreiche Lösungen ausprobiert, bevor ich sie in meiner Frage gefragt und erläutert habe. – rofls

+0

Die als Duplikate markierten Fragen helfen mir nicht, ich habe versucht, 'Popen' so zu verwenden. @JoachimPileborg – rofls

Antwort

3

Ich würde vorschlagen, die Listenform des Aufrufs zu verwenden.

import subprocess 
command = ["vagrant", "ssh", "vmname", "-c", "pvcreate -ff /db/sdb"] 
output,error = subprocess.Popen(
       command, universal_newlines=True, 
       stdout=subprocess.PIPE, 
       stderr=subprocess.PIPE).communicate() 

Dies stellt die Menge der Parameter dar, die übergeben werden, und eliminiert die Notwendigkeit, mit der Shell-Quotierung herumzualbern.

+0

Danke, das scheint für mich zu funktionieren :) – rofls

Verwandte Themen