Seite 1 von 1
externes Programm ohne DosBox starten
Verfasst: Freitag 29. Oktober 2010, 01:08
von The Hit-Man
Ich schreibe mir gerade ein kleines Script, mit dem ich meinen Samba-Server per SSH tunneln kann. Dazu nutze ich ein extrenes Programm mit Namen 'plink.exe'. Das haut auch alles hin, bis auf einen kleinen Schönheitsfehler, das das DosBox Fenster von plink, immer offen ist, also in der Taskleiste. Meine Idee sieht so aus:
Code: Alles auswählen
os.spawnl(os.P_NOWAIT, 'plink.exe', '-ssh benutzer@htm-network.no-ip.org', '-pw passwort', '-L 127.0.0.5:139:192.168.2.110:139', '-N')
Ich starte das plink ja schon in einem eigenen Thread ( so wie ich im Internet gelesen hatte ). Ist es möglich, das komplette Fenster in den Hintergrund zu schieben?
Re: externes Programm ohne DosBox starten
Verfasst: Freitag 29. Oktober 2010, 08:03
von DrFaust
Mein Ansatzpunkt wäre jetzt eher die dosbox config gewesen, also das Python Skript. Gibt es da nicht irgendeine Möglichkeit? Da kann man doch alles mögliche konfigurieren...
Re: externes Programm ohne DosBox starten
Verfasst: Freitag 29. Oktober 2010, 11:53
von Hyperion
Sollte das nicht eher in das "Allgemeine Forum"?
wieso nutzt Du os.spawnl? Aus der Doku:
(Note that the subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using these functions. Check especially the Replacing Older Functions with the subprocess Module section.)
Also benutze lieber das subprocess-Modul.
Iirc hatten wir doch dazu schon mal ne Frage, bei der man bei subprocess Konsolen-Pop-Ups unterbinden konnte?
Re: externes Programm ohne DosBox starten
Verfasst: Freitag 29. Oktober 2010, 16:18
von The Hit-Man
ja, ist gestern nen bischen spät gewesen. das Thema ist im "allegmeinen Forum", besser aufgehoben. Aber ne Lösung habe ich immer noch nicht gefunden. Allerdings wäre mir auch egal wenn ich einen solchen Tunnel, komplett in Python programmieren würde. Nur das mit dem plink.exe, war die einfachste Lösung erst mal und sie funktioniert.
Es gibt natürlich schon fertige SSH-Clients. Allerdings um Samba auf einem Windowsrechner zu tunneln, muß man noch ein:
voran schieben. Ich denke es wird wohl bessere Lösungen geben. Ich könnte mir ja auch mal das VirtualBasicScript anschauen. Nur da habe ich nicht so dolle Möglichkeiten, irgendwann mal ne wxGUI dabei zu legen.
Wäre nur schön gewesen wenn alles nen bischen im Hintergrund laufen würde, ohne DosBox denn für jeden neuen Port-Tunnel, würde eine DosBox aufgehen.
Re: externes Programm ohne DosBox starten
Verfasst: Freitag 29. Oktober 2010, 16:39
von The Hit-Man
konnte es so auf die Schnell unter vbs lösen:
Code: Alles auswählen
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "net stop server /y", 0 ,True
WshShell.Run "plink.exe -ssh benutzer@htm-network.no-ip.org -pw passwort -L 127.0.0.5:139:192.168.2.110:139, -N", 0, True
alles ohne Fenster im Hintergrund. Lieber wäre mir natürlich irgendwie Python.
Re: externes Programm ohne DosBox starten
Verfasst: Freitag 29. Oktober 2010, 17:06
von Hyperion
Hast Du es denn einmal mit subprocess versucht?
Re: externes Programm ohne DosBox starten
Verfasst: Samstag 30. Oktober 2010, 14:48
von The Hit-Man
ja, hatte ich. Es öffnete sich dann ein neues Fenster, mit der Überschrift ./plink.exe und ging dann nicht mehr zu. Hatte es aber nur kurz angetestet, ohne zu schauen, ob es noch mehr Optionen für den subprocess gab.
Allerdings hätte ich unter Python eben viel mehr Möglichkeiten, wie zum Beispiel nen deamon schreiben, der nach Abbruch des Tunnels einen neuen aufbaut.
Re: externes Programm ohne DosBox starten
Verfasst: Sonntag 31. Oktober 2010, 22:29
von Leonidas
Also ich denke das geht schon irgendwie mit subprocess, ich meine dass es dazu irgendwo einen Thread in Froum gab. Finde den aber grad nicht.
Re: externes Programm ohne DosBox starten
Verfasst: Dienstag 2. November 2010, 13:43
von fhoech
Re: externes Programm ohne DosBox starten
Verfasst: Dienstag 2. November 2010, 13:46
von Hyperion
Genau

Das meinte ich (und Leonidas vermutlich auch)!
Re: externes Programm ohne DosBox starten
Verfasst: Dienstag 2. November 2010, 15:12
von Gremlin
Das geht aber seit python 2.7 nicht mehr.
Ich mach es seitdem so:
Code: Alles auswählen
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, creationflags=0x08000000)
(Gilt aber nur für Windows, glaub ich.)
Re: externes Programm ohne DosBox starten
Verfasst: Dienstag 2. November 2010, 16:15
von jerch
Mit 'creationflags=0x08000000' funktionieren aber die Console Handles nicht mehr (stdin, stout, stderr), vgl. hierzu die
API-Doc:
...
The process is a console application that is being run without a console window. Therefore, the console handle for the application is not set.
...
Braucht man diese, gehts nur mit Console und verstecken dergleichen, oder man muss dem Kindprozess andere Deskriptoren/Handles unterschieben.
Funktioniert denn folgendes unter 2.7?
Code: Alles auswählen
import subprocess
from ctypes import *
class STARTUPINFOW(Structure):
_fields_ = [
('cb', c_ulong),
('lpReserved', c_long),
('lpDesktop', c_long),
('lpTitle', c_long),
('dwX', c_ulong),
('dwY', c_ulong),
('dwXSize', c_ulong),
('dwYSize', c_ulong),
('dwXCountChars', c_ulong),
('dwYCountChars', c_ulong),
('dwFillAttribute', c_ulong),
('dwFlags', c_ulong),
('wShowWindow', c_ulong),
('cbReserved2', c_ushort),
('lpReserved2', POINTER(c_ubyte)),
('hStdInput', c_void_p),
('hStdOutput', c_void_p),
('hStdError', c_void_p)]
s = STARTUPINFOW()
s.dwFlags = c_ulong(1)
s.wShowWindow = c_ulong(5) # hier 0 fuer SW_HIDE - Fenster verstecken
p = subprocess.Popen('cmd.exe', creationflags=0x10, startupinfo=s)
Da sollte ein normales DOS-Fenster mit MS-Shell starten.
Ich habe leider kein 2.7 installiert, kann mir aber beim besten Willen nicht vorstellen, dass das subprocess-Modul 'creationflags' und 'startupinfo' nicht mehr an 'CreateProcess()' durchreicht.
Re: externes Programm ohne DosBox starten
Verfasst: Dienstag 2. November 2010, 16:47
von Gremlin
jerch hat geschrieben:Mit 'creationflags=0x08000000' funktionieren aber die Console Handles nicht mehr (stdin, stout, stderr), vgl. hierzu die API-Doc:
Also über die Funktionalität von stdin kann ich nicht sprechen, aber stdout und stderr nutze ich erfolgreich mit meinem oben angegebenen Schnipsel. :K
Aber ja, dein Schnipsel funktioniert unter Python 2.7
Re: externes Programm ohne DosBox starten
Verfasst: Dienstag 2. November 2010, 18:40
von fhoech
Sieht so aus, als wäre das subprocess-Modul für Python 2.7 etwas aufgeräumt worden und dabei auch ist auch das
weggefallen. Ist eigentlich ein recht "hübsches" Beispiel dafür, warum Sternchen-Importe nicht so toll sind

In Python 2.7 kommt man auf einem kleinen Umweg trotzdem an die startupinfo-"Konstanten":
Code: Alles auswählen
import subprocess
from _subprocess import STARTF_USESHOWWINDOW, SW_HIDE
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= STARTF_USESHOWWINDOW
startupinfo.wShowWindow = SW_HIDE
subprocess.Popen('cmd.exe', startupinfo=startupinfo)