2013-03-02 5 views
5

Im Linux-Kernel, ich eine Datei an den Drucker mit dem folgenden BefehlKatze Befehl zum Drucken in Python Verwenden von

cat file.txt > /dev/usb/lp0 

Von dem, was ich verstehe, diese leiten den Inhalt in file.txt in das Druck schicken Lage. Ich habe versucht, den folgenden Befehl

>>os.system('cat file.txt > /dev/usb/lp0') 

ich diesen Befehl dasselbe erreichen würde dachte mit, aber es gab mir eine „Zugriff verweigert“ -Fehler. In der Befehlszeile würde ich vor dem Verketten den folgenden Befehl ausführen.

sudo chown root:lpadmin /dev/usb/lp0 

Gibt es einen besseren Weg, dies zu tun?

+3

Dies sollte über 'System' funktionieren. Können Sie näher auf "nicht funktioniert" eingehen? –

+1

Bitte zeigen Sie, was Sie versucht haben. –

+2

Was ist los mit dem Öffnen von 2 Dateien und Lesen von einem und Schreiben in einen anderen? –

Antwort

2

Während es keinen Grund gibt, warum Ihr Code nicht funktionieren sollte, ist dies wahrscheinlich nicht die Art, wie Sie dies tun möchten. Wenn Sie nur Shell-Befehle ausführen möchten, ist bash viel besser als python. Auf der anderen Seite, wenn Sie Python verwenden möchten, gibt es bessere Möglichkeiten zum Kopieren von Dateien als Shell-Umleitung.

Der einfachste Weg, eine Datei in einer anderen zu kopieren, ist shutil zu verwenden:

shutil.copyfile('file.txt', '/dev/usb/lp0') 

(Natürlich, wenn Sie Berechtigungen Probleme, die von der Arbeit umleiten verhindern, können Sie die gleichen Berechtigungen Probleme mit dem Kopieren haben werden.)

Sie möchten ein Programm, das Eingaben von der Tastatur liest, und wenn es eine bestimmte Eingabe erhält, druckt es eine bestimmte Datei. Das ist einfach:

import shutil 

while True: 
    line = raw_input() # or just input() if you're on Python 3.x 
    if line == 'certain input': 
     shutil.copyfile('file.txt', '/dev/usb/lp0') 

Offensichtlich ein richtiges Programm wird ein bisschen mehr sein komplex it'll verschiedene Dinge tun, mit unterschiedlichen Befehlen und vielleicht Argumente, die ihm sagen, welche Datei zu drucken, und so weiter. Wenn Sie auf diese Weise gehen möchten, ist das Modul cmd eine große Hilfe.

+0

Ich möchte, dass das Programm Shell-Befehle ausführt, sobald es auf bestimmte Eingaben reagiert. Wäre Bash noch besser als Python dafür? – user2125538

+0

@ user2125538: Wenn Sie explizit "Shell-Befehle ausführen" möchten, anstatt "etwas zu tun", dann kann es gut sein. Aber ohne zu wissen, was Sie eigentlich bauen wollen, ist es sehr schwer zu sagen. – abarnert

+0

Um es kurz zu erklären, was ich möchte, ist ein Programm, das, sobald es eine bestimmte Eingabe von einer Tastatur liest, eine Datei an einem bestimmten Ort an den Drucker sendet. – user2125538

0

Denken Sie daran, in UNIX - alles ist eine Datei. Sogar Geräte.

So können Sie einfach grundlegende (oder andere, z. B. shutil.copyfile) Dateien Methoden (http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files) verwenden.

In Ihrem Fall Code kann (nur ein Weg) aussehen:

# Read file.txt 
with open('file.txt', 'r') as content_file: 
    content = content_file.read() 
with open('/dev/usb/lp0', 'w') as target_device: 
    target_device.write(content) 

P. S. Bitte verwenden Sie nicht system() Aufruf (oder ähnlich) Ihr Problem zu lösen.

+0

Nur ein Beispiel, oder? Versucht, ein paar Wege zu zeigen. –

+0

aber die zweite ist nicht einmal zu empfehlen; erster Weg ist immer bevorzugt – Tshepang

+0

Was meinst du nicht empfohlen? Können Sie einen Beweis liefern? Es ist eine grundlegende I/O-Operation! –

Verwandte Themen