Verfasst: Mittwoch 18. Januar 2006, 12:13
Möglichkeit 1 ist das richtige.
Die Dokumentation vom subprocess-Modul müßte den Rest erklären.
--- Heiko.
Die Dokumentation vom subprocess-Modul müßte den Rest erklären.
--- Heiko.
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Ahhh ! Bin ich ja doch schonmal ein bischen weitermodelnine hat geschrieben:Möglichkeit 1 ist das richtige.
--- Heiko.
Code: Alles auswählen
#Daten an Subprozess schicken
import subprocess
p = subprocess.Popen('C:/Ablage/Python/PythonScripte/test.py',stdin = subprocess.PIPE)
raus = "10" + "20" + "Fred vom Jupiter"
p.stdin.write(raus)
p.close()
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Ablage\Python\PythonScripte\test2.py", line 3, in -toplevel-
p = subprocess.Popen('C:/Ablage/Python/PythonScripte/test.py',stdin = subprocess.PIPE)
File "C:\Programme\Python24\lib\subprocess.py", line 533, in __init__
(p2cread, p2cwrite,
File "C:\Programme\Python24\lib\subprocess.py", line 607, in _get_handles
c2pwrite = self._make_inheritable(c2pwrite)
File "C:\Programme\Python24\lib\subprocess.py", line 634, in _make_inheritable
DUPLICATE_SAME_ACCESS)
WindowsError: [Errno 6] Das Handle ist ungültig
Code: Alles auswählen
#übergebene Daten auslesen
import sys
print sys.stdout.read()
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Ablage\Python\PythonScripte\test.py", line 2, in -toplevel-
print sys.stdout.read()
AttributeError: read
Code: Alles auswählen
import subprocess
p = subprocess.Popen("python test2.py", stdin = subprocess.PIPE)
p.stdin.write("Fred vom Jupiter")
p.stdin.close()
print "ende"
Code: Alles auswählen
import sys
print "OK1"
print "XXX%sXXX" % sys.stdin.readline()
print "OK2"
Code: Alles auswählen
import sys
print "OK"
while 1:
line = sys.stdin.readline()
if not line:
break
print line
print "OK2"
Hi Seven!snakeseven hat geschrieben:@ Gerold: Kannst du mir noch sagen, wieso in
deinem Beispiel cPickle.dumps (mit's') verwendet wird ? Habe dazu auch bei Google nichts gefunden und in der Python Referenz, wie leider so oft, auch nichts.
Das könnte man allerdings ganz einfach umgehen, wenn man vor dem Senden ein string_escape macht!gerold hat geschrieben:Da ich davon gehört habe, dass unter Windows das Zielprogramm abgebrochen wird, wenn über sys.stdin des Zielprogramms der String "\x1a" geleitet wird
Code: Alles auswählen
WindowsError: (193, '%1 ist keine zul\xe4ssige Win32-Anwendung')
Rückverfolgung (innerste zuletzt):
Datei "C:\Ablage\Python\PythonScripte\sender.py", Zeile 1, in ?
#!/usr/bin/env python
Datei "C:\Ablage\Python\PythonScripte\sender.py", Zeile 54, in ?
main()
Datei "C:\Ablage\Python\PythonScripte\sender.py", Zeile 38, in main
cwd = os.curdir
Datei "C:\Programme\Python24\Lib\subprocess.py", Zeile 542, in __init__
errread, errwrite)
Datei "C:\Programme\Python24\Lib\subprocess.py", Zeile 706, in _execute_child
startupinfo)
Hi Seven!snakeseven hat geschrieben:Als nächstes werde ich es mal mit Active Python probieren. So als letzter Versuch sozusagen.
Code: Alles auswählen
# Prozess aufrufen
proc = subprocess.Popen(
#Linux: ("/usr/bin/python", "empfaenger.py",),
(r"C:\Python24\python.exe", "empfaenger.py"),
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
cwd = os.curdir
)
Code: Alles auswählen
# Prozess aufrufen
proc = subprocess.Popen(
#Linux: ("/usr/bin/python", "empfaenger.py",),
(r"/Python24/python.exe", "empfaenger.py"),
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
cwd = os.curdir
)
Hi!maguma :D hat geschrieben:wenn ich mir recht erinnere müsste das unter windows auch so gehen!Code: Alles auswählen
(r"/Python24/python.exe", "empfaenger.py"),
Code: Alles auswählen
Datei "C:\Programme\Python24\Lib\subprocess.py", Zeile 706, in _execute_child
startupinfo)
Code: Alles auswählen
# Prozess aufrufen
proc = subprocess.Popen(
(sys.executable, "empfaenger.py"),
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
cwd = os.curdir
)
Zum nachlesen gibts die Dokumentation des sys-Modulssnakeseven hat geschrieben:Darf ich fragen, wie du auf "sys.executable" gekommen bist ? Nur so zum Nachlesen, um zu kapieren, was es macht.
Hi Seven!snakeseven hat geschrieben:Darf ich fragen, wie du auf "sys.executable" gekommen bist ? Nur so zum Nachlesen, um zu kapieren, was es macht.
Code: Alles auswählen
---------------------------------------------------------------------
Traceback (most recent call last):
File "Modul_Handler.py", line 434, in ? ' # Lookat() = Hauptfunktion (Loop)
File "Modul_Handler.py", line 174, in Lookat # init_proz1() (s.u.)
File "Modul_Handler.py", line 71, in init_proz1 # gv.pz1 = subprocess.Popen('... Modul_1.exe',stdin = subprocess.PIPE)
File "subprocess.pyc", line 533, in __init__
File "subprocess.pyc", line 607, in _get_handles
File "subprocess.pyc", line 634, in _make_inheritable
WindowsError: [Errno 6] Das Handle ist ungültig
---------------------------------------------------------------------
Code: Alles auswählen
def init_proz1(event=None):
gv.neustart1 = True
gv.neust1 = 0
if gv.pz1.poll() == 0:
gv.pz1 = subprocess.Popen('... Modul_1.exe',stdin = subprocess.PIPE)
else:
kill(gv.pz1.pid)
gv.pz1 = subprocess.Popen('... Modul_1.exe',stdin = subprocess.PIPE)
def kill(pid):
handle = win32api.OpenProcess(1, 0, pid)
return (0 != win32api.TerminateProcess(handle, 0))
@1)Ich sehe in dem zitierten Thread nicht die Antwort auf mein Problem. Sollte cPickle dran schuld sein ?jens hat geschrieben:Du hast den anderen Thread http://www.python-forum.de/viewtopic.php?t=4941 verfolgt, oder?
Was hast du überhaupt vor??? Lagerst du Teile deines Programms aus und machst mit py2exe daraus Ausführbare Dateien??? Das ist sicherlich nicht der optimale Weg...
Code: Alles auswählen
def _get_handles(self, stdin, stdout, stderr):
"""Construct and return tupel with IO objects:
p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
"""
if stdin == None and stdout == None and stderr == None:
return (None, None, None, None, None, None)
p2cread, p2cwrite = None, None
c2pread, c2pwrite = None, None
errread, errwrite = None, None
if stdin == None:
p2cread = GetStdHandle(STD_INPUT_HANDLE)
elif stdin == PIPE:
p2cread, p2cwrite = CreatePipe(None, 0)
# Detach and turn into fd
p2cwrite = p2cwrite.Detach()
p2cwrite = msvcrt.open_osfhandle(p2cwrite, 0)
elif type(stdin) == types.IntType:
p2cread = msvcrt.get_osfhandle(stdin)
else:
# Assuming file-like object
p2cread = msvcrt.get_osfhandle(stdin.fileno())
p2cread = self._make_inheritable(p2cread)
if stdout == None:
c2pwrite = GetStdHandle(STD_OUTPUT_HANDLE)
elif stdout == PIPE:
c2pread, c2pwrite = CreatePipe(None, 0)
# Detach and turn into fd
c2pread = c2pread.Detach()
c2pread = msvcrt.open_osfhandle(c2pread, 0)
elif type(stdout) == types.IntType:
c2pwrite = msvcrt.get_osfhandle(stdout)
else:
# Assuming file-like object
c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
c2pwrite = self._make_inheritable(c2pwrite) # Fehler hier, 607.
if stderr == None:
errwrite = GetStdHandle(STD_ERROR_HANDLE)
elif stderr == PIPE:
errread, errwrite = CreatePipe(None, 0)
# Detach and turn into fd
errread = errread.Detach()
errread = msvcrt.open_osfhandle(errread, 0)
elif stderr == STDOUT:
errwrite = c2pwrite
elif type(stderr) == types.IntType:
errwrite = msvcrt.get_osfhandle(stderr)
else:
# Assuming file-like object
errwrite = msvcrt.get_osfhandle(stderr.fileno())
errwrite = self._make_inheritable(errwrite)
return (p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite)
def _make_inheritable(self, handle):
"""Return a duplicate of handle, which is inheritable"""
return DuplicateHandle(GetCurrentProcess(), handle,
GetCurrentProcess(), 0, 1,
DUPLICATE_SAME_ACCESS) # Fehler hier, 634.