2016-03-22 7 views
1

Ich schreibe eine Python-App, die einige Befehle auf einem Gnu-Bildschirm ausgeführt wird, ohne den Bildschirm zu verbinden und den Hardcopy-Puffer zu sehen. Insbesondere laufe ich:Gnu Bildschirm Hardcopy ohne Beitritt Bildschirm

screen -dmS test 
screen -S test -p 0 -X stuff "ls$(printf \\r)" 
screen -S test -X hardcopy screenOutput.txt 

wenn ich screenOutput.txt ansehe, sehe ich nichts.

Allerdings, wenn ich den Bildschirm anschließen, und dann Hardcopy laufen,

screen -dmS test 
screen -S test -p 0 -X stuff "ls$(printf \\r)" 
screen -r test 
(quit the screen with c-A c-D) 
screen -S test -X hardcopy screenOutput.txt 

Dann sehe ich die Ausgabe in screenOutput.txt.

Gibt es eine Möglichkeit, Hardcopy zu erhalten, um in die Datei zu schreiben, ohne dem Bildschirm beizutreten?

+0

Verwandte: http://StackOverflow.com/Questions/4807474/Copying-gnu-Screen-Scrollback-Buffer-To-File-Extended-Hardcopy –

+0

Dies funktioniert mit Version 4.03.01, jede Idee, wie Sie es bekommen Arbeit mit 4.00.03? – user1763510

+1

Betrachtet man das Git-Protokoll, [gab es seit 2006 einige Fixes für 'Hardcopy'] (http://git.savannah.gnu.org/cgit/screen.git/log/?qt=grep&q=hardcopy), so kann es sehr gut in "4.00.03" gebrochen werden. Möglicherweise möchten Sie durch die Quelle gehen, um zu überprüfen, ob falsche Daten geschrieben werden oder ob nur ein falscher Pfad verwendet wird. –

Antwort

1

Ein Beispiel zum Senden von Befehlen an eine Sitzung finden Sie unter linux - Send command to detached screen and get the output - Unix & Linux Stack Exchange. Ein korrekter Aufruf lautet:

screen -dmS test 
screen -S test -X hardcopy screenOutput.txt 

I.e. -X soll die erste Befehlsoption sein.-d/-r Schalter, um nur angehängte/getrennte Sitzungen zu suchen, müssen folgen es (die Dokumente sind notorisch vage zu diesem Thema); In diesem Fall werden sie überhaupt nicht benötigt. (Leere Datei erzeugen) in screenv4.0.3 und Arbeit in v4.2.0 und bis in der gleichen Umgebung

Ich bestätigte dies nicht funktionieren.

umfangreiche Untersuchung:

Ausprüfen zeigt, dass die Ursache ist in WriteFile bei fileio.c:472: if (!fore) break; die die Funktion beendet werden, ohne irgendetwas zu schreiben, weil fore (ein Zeiger auf das Vordergrundfenster) ist in der Tat NULL. Ich konnte das spezifische Festschreiben nicht feststellen, wo dies behoben wurde, aber habe überprüft, dass es nicht NULL in v4.2.0 ist. Die Variable wird an einer Anzahl von Stellen um die Codebasis herum gesetzt und auf ungefähr die gleiche Anzahl von Stellen auf NULL zurückgesetzt, oft in einem Code, der der Zuweisung folgt. Die Chancen einer Workaround-Lösung sind daher sehr gering.

bekräftige ich hiermit, dass in screenv4.0.3, hardcopy ist gebrochen, und Sie haben zu aktualisieren (zum Beispiel eine Version /usr/local installieren, so dass sie den Bestand ein überschreibt).

+0

Wenn ich die ersten beiden Befehle ausführen (aber die Option -r in das -S ändern), bekomme ich immer noch nichts in der Datei screenOutput.txt. – user1763510

+0

@ user1763510 WFM mit dem Code in der Antwort. 'Bildschirm v4.03.01' –

+0

Seltsam, ich bin auf OSX 10.10.5. Bist du auf Linux? Es scheint, als würde es keinen Unterschied machen. 'Screen Version 4.00.03' – user1763510

Verwandte Themen