Форум сайта python.su
0
Всем привет.
Подскажите как правильно передать переменную в subprocess.call
вот есть такая задача:
в переменную загнать сетевой путь и потом этот путь передать на исполние виндовой команде.
Пытался делать так:
td1 = "\\td-ts01\HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\" subprocess.call(['cmd', '/K', 'reg', 'delete', td1, '/f'])
\\td-ts01\\HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\
print (td1)
\\td-ts01\HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\
Отредактировано das-ich (Фев. 4, 2013 13:58:03)
Офлайн
221
потому что вы не учли что в строке могут быть управляющие символы, напрмиер \t,\n\r и тп.
для решения вашей проблемы можно указывать строку как “сырую”:
td1 = r'\\td-ts01\HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\'
td1 = '\\\\td-ts01\\HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\"
Офлайн
0
спасибо поправил.
но все равно в 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
Отредактировано das-ich (Фев. 5, 2013 07:59:47)
Офлайн
221
что то я не вижу, где лишние слэшы, в ошибке указывается repr представление.
Что бы понять что не так, я бы посоветовал вам с помощью отладчика проследить во что конкретно превращается итоговая строка, которая передается на исполнение.
А вот счаз заметил, вы вызываете call без параметра shell=True, поиграйтесь с этим.
Вообще ознакомьтесь с сылкой которую я дал.
Офлайн