2013-03-02 15 views
5

nel kernel di Linux, posso inviare un file alla stampante utilizzando il seguente comandoUtilizzando comando cat in Python per la stampa

cat file.txt > /dev/usb/lp0 

Da quello che ho capito, questo reindirizza il contenuto in file.txt nella stampa Posizione. Ho provato ad utilizzare il seguente comando

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

Ho pensato che questo comando sarà ottenere la stessa cosa, ma mi ha dato un errore di "Autorizzazione negata". Nella riga di comando, eseguirò il seguente comando prima di concatenare.

sudo chown root:lpadmin /dev/usb/lp0 

C'è un modo migliore per farlo?

+3

Questo dovrebbe funzionare correttamente tramite 'sistema'. Puoi approfondire "non ha funzionato"? –

+1

Si prega di mostrare ciò che hai provato. –

+2

Cosa c'è che non va nell'apertura di 2 file e nella lettura da uno e la scrittura in un altro? –

risposta

2

Mentre non c'è motivo per cui il tuo codice non dovrebbe funzionare, probabilmente questo non è il modo in cui vuoi farlo. Se si desidera eseguire solo comandi shell, bash è molto meglio di python. D'altra parte, se si desidera utilizzare Python, ci sono modi migliori per copiare i file rispetto al reindirizzamento della shell.

Il modo più semplice per copiare un file all'altro è quello di utilizzare shutil:

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

(Naturalmente se avete problemi di autorizzazioni che impediscono reindirizzano di lavorare, avrete gli stessi problemi di autorizzazioni con la copia.)


si desidera un programma che legge l'input da tastiera, e quando si ottiene un certo ingresso, stampa un certo file. E 'semplice:

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') 

Ovviamente un vero e proprio programma sarà un po' più complesso-it'll fare cose diverse con diversi comandi, e magari prendere argomenti che raccontano è che il file da stampare, e così via. Se vuoi andare in questo modo, il modulo cmd è di grande aiuto.

+0

Desidero che il programma esegua comandi shell una volta che risponde a determinati input. Bash sarebbe ancora meglio di Python per questo? – user2125538

+0

@ user2125538: Se si desidera "eseguire comandi shell" esplicitamente anziché "fare alcune cose", allora potrebbe essere. Ma senza sapere di più su cosa stai effettivamente cercando di costruire, è molto difficile dirlo. – abarnert

+0

Per spiegarlo brevemente, quello che vorrei fosse un programma che, una volta letto un determinato input da una tastiera, invia un file in una determinata posizione alla stampante. – user2125538

0

Ricordare che in UNIX è tutto un file. Anche i dispositivi.

Quindi, è possibile utilizzare solo i metodi di base (o qualsiasi altro metodo, ad esempio shutil.copyfile) (http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files).

Nel codice caso può (solo un modo) essere così:

# 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. Per favore, non usare il sistema() chiamata (o simile) per risolvere il problema.

+0

Solo un esempio, non è vero? Ho cercato di mostrare alcuni modi. –

+0

ma il secondo non è nemmeno raccomandato; il primo modo è sempre preferito – Tshepang

+0

Cosa intendi non raccomandato? Puoi fornire una prova? È un'operazione I/O di base! –

Problemi correlati