Я хотел бы запустить исполняемый файл, который выполняет некоторую обработку набора данных, расположенного на удаленном файлере.Как часть дизайна, я бы хотел, чтобы расположение файла было гибким, и что-то, что передавалось моей программе на python во время выполнения.
Я собрал следующий фрагмент кода, который иллюстрирует мою проблему:но с помощью команды python
, так что любой может запустить это:
#!/usr/bin/env python
import os
import subprocess
def runMySubProcess(cmdstr, iwd):
p = subprocess.Popen(cmdstr,
shell=True,
cwd=iwd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
(stdout, stderr) = p.communicate()
if stderr:
raise IOError, stderr
return stdout
if __name__ == '__main__':
print runMySubProcess('python -h', 'C:\\')
print runMySubProcess('python -h', '\\\\htpc\\nas')
Это прекрасно работает, если iwd
находится на общем ресурсе, который сопоставлен с буквой диска на машине.Но если iwd
- это UNC-путь, то вызов subprocess.Popen()
заканчивается выводом stderr, что, в свою очередь, вызывает исключение IOError:
Traceback (most recent call last):
File "test.py", line 19, in <module>
print runMySubProcess('dir', '\\\\htpc\\nas')
File "test.py", line 14, in runMySubProcess
raise IOError, stderr
IOError: '\\htpc\nas'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
Есть ли способ заставить этот вызов подпроцесса работать без обращения к синтаксическому анализу iwd
и создания временного монтирования диска на машине, которая существует во время выполнения команды подпроцесса?Я хочу избежать необходимости управлять созданием и очисткой креплений дисков.И, конечно же, я бы предпочел не иметь дело с (хотя и маловероятным) случаем, когда все буквы дисков в данный момент используются на компьютере.