Vielleicht kann das screen
Tool mit der Bildschirmprotokollierungsfunktion den Trick für Sie erledigen. Beginnen Sie einfach screen
in der Kommandozeile und mit den Tasten CTRL-a + H
(zuerst Kombination CTRL + a
und dann ein Großbuchstabe H mit SHIFT + H
, nur zur Klarstellung) wird alles in der Datei protokolliert screenlog.0
. Das Verzeichnis, in dem sich die Protokolldatei befindet, hängt davon ab, wo Sie den Bildschirm gestartet haben. Wenn Sie also den Bildschirm in $ HOME gestartet haben, wird die Protokolldatei dort gefunden.
Wie speichere ich alle Befehlsausgaben und Fehler?
Hallo!
Ich muss alle Befehle, Stdout und Stderr erfassen, ohne die Befehle zu ergänzen.
Ich meine, dass ich die Ausgabe davon speichern / speichern muss:
- $ echo 'test'
- $ ls -l
- $ cat some_file
Befehlsdatei
- alex @ bender: / pwd $ echo 'test'
- alex @ bender: / pwd $ ls
- alex @ bender: / pwd $ cat some_file
- alex @ bender: / pwd $ fsdfsdfsd
stdout.file
- Prüfung
- test.txt einige_Datei
- etwas Dateiinhalt
stderr.file
_4. fsdfsdfsd
Für den ersten Teil der Frage habe ich ein Skript gefunden, das einen Trap verwendet. Bevor der Befehl ausgewertet wird, speichert er den zu protokollierenden Befehl. Aber was ist mit dem Speichern der Ausgabe? Wiederholung: Dies sollte gelöst werden, ohne dass der Befehl hinzugefügt wurde. Ich meine, nach dem Ausführen des Skripts muss ich nicht schreiben, zum Beispiel zuerst den Befehl ls > log.file. Ich möchte es ohne " > log.file " sehen.
Ich schreibe ein Python-Skript, es funktioniert wie ein Befehlswrapper.
if name == ' main ':
user = os.getlogin ()
Computername = os.uname () [1]
stdinbuff = open('commands', 'w') stdoutbuff = open('outs', 'w') command_string = 1 while command_string != '0': a = user + '@' + machine_name + ":" + os.getcwd() + '>'; a = a.replace('/home/', '~/') print a, command_string = raw_input() command_args = command_string.split() proc = subprocess.Popen(command_args, stdout=subprocess.PIPE) (out, err) = proc.communicate() print out stdinbuff.write(command_string+'\n') stdoutbuff.write(out+'\n') stdinbuff.close() stdoutbuff.close()
In diesem Wrapper kann ich jedoch keine automatische Vervollständigung wie in Bash verwenden, und dieses Skript kann nicht alles speichern, was ich möchte.
Vielleicht könnte mir jemand sagen, was ich tun muss?
2 Antworten auf die Frage
Dies kann mit dem Modul python pty erfolgen: Verwenden eines Pseudo-Terminals, um alle Ein- und Ausgaben einer Terminalsitzung aufzuzeichnen .
Verwandte Probleme
-
1
Pausieren Sie alle Aufgaben außer x CPU-intensiven Aufgaben
-
6
Welche zsh-Funktionen verwenden Sie?
-
5
Transparente Eingabeaufforderung in Vista?
-
4
Verwenden Sie den Windows-Aktenkoffer von der Befehlszeile aus
-
4
Warum sind einige Befehle nicht vorhanden?
-
11
Gibt es eine einfache Möglichkeit, MP3-Dateien zu teilen?
-
2
Wie kann ich OSX Terminal.app dazu bringen, den Vollbildmodus zu öffnen und nicht zu kaskadieren?
-
4
Remote-Ordner unter Linux synchronisieren
-
6
Vollbild-Vista-Eingabeaufforderung oder Ersatz
-
10
Wie kann ich die Bash-Historie durchsuchen und einen Befehl erneut ausführen?