Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 23, 2016 23:11:59

Maxem
Зарегистрирован: 2016-01-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Командная строка

Всем здравствуйте, собственно код -

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)

Почему питон в командную строку отсылает без кавычек?

Отредактировано Maxem (Янв. 24, 2016 08:22:11)

Офлайн

#2 Янв. 24, 2016 01:55:14

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Командная строка

Maxem
код нужно обрамлять в теги code

Maxem
command = r'“C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe”'
это бессмыслица какая то
command = r'"C:\Program Files (x86)\1cv8\common\1cestart.exe"'



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Янв. 24, 2016 07:59:11

Maxem
Зарегистрирован: 2016-01-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Командная строка


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 (Янв. 24, 2016 08:19:39)

Офлайн

#4 Янв. 24, 2016 08:18:39

Maxem
Зарегистрирован: 2016-01-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Командная строка

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

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” не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

но почему питон передает без кавычек?

Офлайн

#5 Янв. 24, 2016 08:25:09

Maxem
Зарегистрирован: 2016-01-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Командная строка

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

Офлайн

#6 Янв. 24, 2016 08:39:46

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Командная строка

А если попробовать вместо os.system написать os.startfile?

Офлайн

#7 Янв. 24, 2016 08:43:47

Maxem
Зарегистрирован: 2016-01-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Командная строка

Firik
А если попробовать вместо os.system написать os.startfile?
А он с аргументами стартанет?

Офлайн

#8 Янв. 24, 2016 08:56:29

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Командная строка

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!

Отредактировано Firik (Янв. 24, 2016 08:57:24)

Офлайн

#9 Янв. 24, 2016 09:04:25

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Командная строка

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 и переставляйте. Если будете много программировать то в конце концов сами к этому прийдете.

Это не спасет полностью. Виндовые программы еще могут нагадить в переменных окружения и реестре. Но это уже встречается реже.



Отредактировано doza_and (Янв. 24, 2016 09:14:01)

Офлайн

#10 Янв. 24, 2016 09:13:51

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Командная строка

doza_and
А если экранировать пробелы? Как пишут:
"Для того, что бы командная оболочка правильно трактовала имена с пробелами необходимо их экранировать в кавычки, например так:

import os
os.system(r'c:/"Program Files"/"Mozilla Firefox"/firefox.exe')
"

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version