Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 4, 2013 13:56:59

das-ich
Зарегистрирован: 2013-02-04
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

сетевой путь в python под виндой

Всем привет.

Подскажите как правильно передать переменную в subprocess.call
вот есть такая задача:
в переменную загнать сетевой путь и потом этот путь передать на исполние виндовой команде.
Пытался делать так:

td1 = "\\td-ts01\HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\"
subprocess.call(['cmd', '/K', 'reg', 'delete', td1, '/f'])

но в таком варианте td1 выдает все с двумя слешами
\\td-ts01\\HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\
и естественно виндовая команда reg говорит, что не верный путь
при этом если делать
print (td1)
то все нормально показывает
\\td-ts01\HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\

Отредактировано das-ich (Фев. 4, 2013 13:58:03)

Офлайн

#2 Фев. 5, 2013 02:09:26

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

сетевой путь в python под виндой

потому что вы не учли что в строке могут быть управляющие символы, напрмиер \t,\n\r и тп.
для решения вашей проблемы можно указывать строку как “сырую”:

td1 = r'\\td-ts01\HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\'
либо экранировать слеши, так как запись вида \\ означает что символ не является управляющим, а слешем, т.е.
td1 = '\\\\td-ts01\\HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\"

Обратите внимание что в строке у вас присутствуют символы пробелов, при передачи как параметры в функции могут возникать проблемЫ, конкретно в вашем случае при вызове call с передачей ему списка аргументов такого вроде быть не должно



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

Офлайн

#3 Фев. 5, 2013 07:58:25

das-ich
Зарегистрирован: 2013-02-04
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

сетевой путь в python под виндой

спасибо поправил.
но все равно в cmd попадает строка с лишними слешами

>>> td1 = r'"\\td-ts01\HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\%s"' % f
>>> print (td1)
"\\td-ts01\HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-73586283-688789844-682003330-4969"

вот тут в ошибке видно

subprocess.check_call(['cmd', '/K', 'reg', 'delete', td1, '/f'])
Traceback (most recent call last):
  File "<pyshell#252>", line 1, in <module>
    subprocess.check_call(['cmd', '/K', 'reg', 'delete', td1, '/f'])
  File "C:\Python33\lib\subprocess.py", line 545, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['cmd', '/K', 'reg', 'delete', '"\\\\td-ts01\\HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\S-1-5-21-73586283-688789844-682003330-4969"', '/f']' returned non-zero exit status 3221225786
и в cmd появляется ошибка что не верный путь.

Отредактировано das-ich (Фев. 5, 2013 07:59:47)

Офлайн

#4 Фев. 5, 2013 11:10:53

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

сетевой путь в python под виндой

что то я не вижу, где лишние слэшы, в ошибке указывается repr представление.
Что бы понять что не так, я бы посоветовал вам с помощью отладчика проследить во что конкретно превращается итоговая строка, которая передается на исполнение.

А вот счаз заметил, вы вызываете call без параметра shell=True, поиграйтесь с этим.

Вообще ознакомьтесь с сылкой которую я дал.



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version