Найти - Пользователи
Полная версия: сетевой путь в python под виндой
Начало » Python для новичков » сетевой путь в python под виндой
1
das-ich
Всем привет.

Подскажите как правильно передать переменную в 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\
JOHN_16
потому что вы не учли что в строке могут быть управляющие символы, напрмиер \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 с передачей ему списка аргументов такого вроде быть не должно
das-ich
спасибо поправил.
но все равно в 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 появляется ошибка что не верный путь.
JOHN_16
что то я не вижу, где лишние слэшы, в ошибке указывается repr представление.
Что бы понять что не так, я бы посоветовал вам с помощью отладчика проследить во что конкретно превращается итоговая строка, которая передается на исполнение.

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

Вообще ознакомьтесь с сылкой которую я дал.
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