У меня возникли проблемы с пониманием функции подпроцесса в Python 2.7. У меня есть некоторые команды в сценарии оболочки, которые я пытаюсь преобразовать в Python, например, svn export -r 5 ...
, но я не хочу зависеть от библиотеки, такой как pysvn
, для этого. Решением этого (насколько я понимаю) является использование подпроцесса и просто запуск каждой отдельной команды, которая будет в сценарии оболочки. Должно ли это быть достигнуто subprocess.call("svn export -r 5", shell=True)
? Или Popen
что я должен смотреть? Я знаю, что было сказано, что вам следует избегать shell=True
, но в моем случае нет проблем с безопасностью или возможной ошибки пользователя. Любой совет будет принят во внимание.Пытаясь обойти pysvn, могу ли я использовать функцию подпроцесса для записи вызовов svn в сценарии оболочки?
-1
A
ответ
0
subprocess.call
просто тонкая оболочка вокруг subprocess.Popen
, что ожидает завершение процесса:
def call(*args, **kwargs):
return Popen(*args, **kwargs).wait()
Единственной причины, чтобы использовать оболочку для запуска вашей команды, если вы хотите запустить какую-то более или менее сложную оболочку команда. С помощью простой простой команды и ее аргументов лучше передать один список строк, состоящий из имени команды и ее аргументов.
subprocess.call(["svn", "export", "-r", "5"])
Если вы пишете функцию, которая могла бы, например, взять номер версии в качестве аргумента можно передать, что svn export
до тех пор, как вы убедитесь, что это строка:
def svn_export(r):
subprocess.call(["svn", "export", "-r", str(r)])
Смежные вопросы
- 1. Могу ли я использовать регулярное выражение в сценарии оболочки bash
- 2. Могу ли я использовать hexdump в сценарии оболочки?
- 3. pysvn with svn + ssh
- 4. Как я могу использовать команду at в сценарии оболочки?
- 5. Должен ли я использовать частичную функцию для вызовов базы данных
- 6. Требуется ли PySVN Subversion?
- 7. Использовать su в сценарии оболочки
- 8. Запустите функцию python в сценарии оболочки
- 9. метод для записи в файлах журнала в сценарии оболочки
- 10. Могу ли я использовать svn rebase для некоторой версии svn? (Подобно svn up -r ...)
- 11. Могу ли я использовать DROOLS в этом сценарии?
- 12. Могу ли я использовать PowerShell в режиме оболочки для Emacs?
- 13. Как я могу использовать функцию записи макросов для PyQt
- 14. Для цикла в сценарии оболочки
- 15. Могу ли я использовать обещания для упрощения родственных вызовов cordova
- 16. Могу ли я использовать git для слияния двух svn-деревьев?
- 17. Могу ли я использовать функцию сортировки `sortrows`?
- 18. Могу ли я использовать svn для скриптов RFT?
- 19. Как я могу обработать элемент массива Perl в сценарии оболочки?
- 20. Могу ли я использовать функцию graphshortestpath здесь?
- 21. pysvn запрашивает пароль с помощью svn + ssh
- 22. Как я могу использовать SVN в BBedit?
- 23. Могу ли я узнать, почему я не могу написать файл в сценарии оболочки?
- 24. Могу ли я ссылаться на Сценарий в другом сценарии?
- 25. Могу ли я использовать триггер в этом сценарии?
- 26. Как использовать параллельное выполнение в сценарии оболочки?
- 27. Возврат из вызовов подпроцесса
- 28. Могу ли я использовать справочную функцию для Excel в Word?
- 29. Могу ли я использовать функцию вместо переменной?
- 30. Предотвращение подпроцесса подпроцесса от записи в stdout
Не используйте 'pysvn'. Используйте привязки SWIG Python: http://svnbook.red-bean.com/en/1.8/svn.developer.usingapi.html#svn.developer.usingapi.otherlangs – bahrep
Я стараюсь избегать загрузки каких-либо библиотек, поэтому я я использую подпроцесс, но все же полезно отметить примечание SWIG. –