Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using cat command in Python for printing

In the Linux kernel, I can send a file to the printer using the following command

cat file.txt > /dev/usb/lp0

From what I understand, this redirects the contents in file.txt into the printing location. I tried using the following command

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

I thought this command would achieve the same thing, but it gave me a "Permission Denied" error. In the command line, I would run the following command prior to concatenating.

sudo chown root:lpadmin /dev/usb/lp0

Is there a better way to do this?

like image 351
user2125538 Avatar asked Mar 02 '13 00:03

user2125538


People also ask

How do you use the cat command in Python?

To create a new file: Creating a new file is possible and fairly simple with the cat command. The syntax would be cat > filename this would create the new file in the current directory from the Python API.

What does cat mean in Python?

The 'cat' [short for “concatenate“] command is one of the most frequently used commands in Linux and other operating systems. The cat command allows us to create single or multiple files, view contain of file, concatenate files and redirect output to the terminal or to files.

What is cat command in Terminal?

The cat command is a utility command in Linux. One of its most common usages is to print the content of a file onto the standard output stream. Other than that, the cat command also allows us to write some texts into a file.


1 Answers

While there's no reason your code shouldn't work, this probably isn't the way you want to do this. If you just want to run shell commands, bash is much better than python. On the other hand, if you want to use Python, there are better ways to copy files than shell redirection.

The simplest way to copy one file to another is to use shutil:

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

(Of course if you have permissions problems that prevent redirect from working, you'll have the same permissions problems with copying.)


You want a program that reads input from the keyboard, and when it gets a certain input, it prints a certain file. That's easy:

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

Obviously a real program will be a bit more complex—it'll do different things with different commands, and maybe take arguments that tell it which file to print, and so on. If you want to go that way, the cmd module is a great help.

like image 138
abarnert Avatar answered Oct 30 '22 02:10

abarnert