Найти - Пользователи
Полная версия: Командная строка
Начало » Python для новичков » Командная строка
1 2
Maxem
Всем здравствуйте, собственно код -
import os
command = r'"C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe"'
os.system(command)
так работает
import os
command = r'"C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe" CREATEINFOBASE File=e:\\test4; /AddInList TEST4 /UseTemplate "E:\\Share\\Python\\1C\\CFs\\Acc\\2\\1Cv8.cf"'
os.system(command)
так не работает

при вводе в ком строку (с кавычками)

“C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe” CREATEINFOBASE File=e:\\test4; /AddInList TEST4 /UseTemplate “E:\\Share\\Python\\1C\\CFs\\Acc\\2\\1Cv8.cf”

отрабатывает то что нужно

Уважаемые знатоки, внимание вопрос: Почему?

Ругается -
“C:\\Program” �� ���� ����७��� ��� ���譥�
��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.
это по видимому
“С:\Program” не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
именно так - (Python 3.4, PyCharm 5)

Почему питон в командную строку отсылает без кавычек?
JOHN_16
Maxem
код нужно обрамлять в теги code
Maxem
command = r'“C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe”'
это бессмыслица какая то
command = r'"C:\Program Files (x86)\1cv8\common\1cestart.exe"'
Maxem

command = r'"C:\Program Files (x86)\1cv8\common\1cestart.exe" CREATEINFOBASE File=e:\test4; /AddInList TEST4 /UseTemplate "E:\Share\Python\1C\CFs\Acc\2\1Cv8.cf"'

так тоже не работает
Maxem
насколько я понял он вставляет в командную строку команду

C:\Program Files (x86)\1cv8\common\1cestart.exe CREATEINFOBASE File=e:\test4; /AddInList TEST4 /UseTemplate E:\Share\Python\1C\CFs\Acc\2\1Cv8.cf

и она ругается (ось)

“С:\Program” не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

но почему питон передает без кавычек?
Maxem
JOHN_16
это бессмыслица какая то
command = r'“C:\Program Files (x86)\1cv8\common\1cestart.exe”'
Почему же бессмыслица? Запуск одноэс.
Firik
А если попробовать вместо os.system написать os.startfile?
Maxem
Firik
А если попробовать вместо os.system написать os.startfile?
А он с аргументами стартанет?
Firik
Maxem
Возможно что нет. Для передачи аргументов рекомендуется использовать в 3 питоне subprocess. Пример из оф. документации:
>>> import shlex, subprocess
>>> command_line = raw_input()
/bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
>>> args = shlex.split(command_line)
>>> print args
['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
>>> p = subprocess.Popen(args) # Success!
doza_and
Maxem
так не работает

Я подобную проблему решаю так. У меня на windows машине НЕТ ПУТЕЙ С ПРОБЕЛАМИ и РУССКИМИ БУКВАМИ. Потому что мозг сломаешь с тем что с этим делать под виндой. И вам того советую.

Конкретно по вашей проблеме. Возможно поможет :).

import subprocess as sp
sp.check_call('start "1" "C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe" CREATEINFOBASE File=e:\\test4; /AddInList TEST4 /UseTemplate E:\\Share\\Python\\1C\\CFs\\Acc\\2\\1Cv8.cf',shell=1)

Конкретно вид стоки можете отладить в командном файле.

Команда отдается командному интерпретатору windows. А он когда встречает аргументы командной строки целиком без пробелов делает все как надо. Но! В команде microsoft подумали что для нас очень важно установить название окошка консоли, даже важнее чем задать, что будет выполняться. Поэтому если встречается строки в кавычках, то первая строка интерпретируется как название окна, а остальное как аргументы (это вместо того чтобы задать название окна ключами). Поэтому если название команды надо заключать в кавычки, то перед ней надо вставить несущественную строку в кавычках.

Таких подарков в windows миллион. Кардинальное решение отказаться от использования путей с пробелами и не английскими буквами. Сносите 1S и переставляйте. Если будете много программировать то в конце концов сами к этому прийдете.

Это не спасет полностью. Виндовые программы еще могут нагадить в переменных окружения и реестре. Но это уже встречается реже.
Firik
doza_and
А если экранировать пробелы? Как пишут:
"Для того, что бы командная оболочка правильно трактовала имена с пробелами необходимо их экранировать в кавычки, например так:
import os
os.system(r'c:/"Program Files"/"Mozilla Firefox"/firefox.exe')
"
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB