Использование lpr для печати файла, путь к которому содержит пробелы

211
dearprudence

Итак, мой путь:

/Users/work/Desktop/My Folder/My File.txt

Моя папка и мой файл имеют пробелы. Конечно, в терминале, когда вы вкладываете для автозаполнения, это будет делать /Users/work/Desktop/My\ Folder/My\ File.txt.

Моя проблема, когда я использую этот путь в Python как таковой:

from subprocess import Popen  def print_rc(file): with open(file, 'r') as infile: p = Popen(["lpr -o page-ranges=1-2"], stdin=infile) output = p.communicate()[0] 

Я получаю ошибку, эту no such file or directoryошибку. Когда я это делаю os.path.exists('/Users/work/Desktop/My Folder/My File.txt'), получается так True. Поэтому я думаю, что проблема связана с пробелами.

Что мне нужно сделать, чтобы преобразовать строку Python в нечто, что может понять bash?

0
Нет, это не то, почему. Ignacio Vazquez-Abrams 6 лет назад 0
Почему я вызываю lpr с тем же файлом прямо из командной строки, но не из Python? Мой принтер печатает, когда в командной строке. dearprudence 6 лет назад 0
ПОДОЖДИТЕ! `shell = True` необходимо добавить в конструктор` Popen`. лол dearprudence 6 лет назад 0
Потому что вы делаете это правильно в командной строке. Ignacio Vazquez-Abrams 6 лет назад 0

1 ответ на вопрос

2
grawity

subprocess.Popenне хочет командной строки оболочки Он хочет массив аргументов exec:

Popen(["lpr", "-o", "page-ranges=1-2"])