У меня есть простая игра-версия, которая вызовет скрипт оболочки на удаленном сервере, сценарий оболочки вызовет другой скрипт python, который что-то сделает, когда я запустил загружаемую книгу, сценарий не работает, но когда я ssh на сервер и запустить ту же команду вручную, это сработало. Я сделал некоторую отладку, кажется, при вызове сценария python, если я удалю все инструкции импорта из сценария python, он работает от незаменимого, но я не понимаю, почему он работает, когда я ssh на сервер и хотел бы имеют некоторое предложение о том, как решить эту проблему.Почему скрипт Python работает по-разному при использовании функции?
сценарий питона:
#!/usr/bin/python
import socket
import argparse
import logging
import subprocess
import time
import imp
def main():
f = open('/afile', 'w')
f.write('a test line')
f.close()
if __name__ == '__main__':
main()
эти импорта не используется здесь, он будет использоваться в моем реальном сценарии, здесь я просто записать строку в файл для отладки.
В анзибль playbooks просто просто нравится:
---
- hosts: servers
tasks:
- name: trigger the script
shell: /start.sh
start.sh затем просто вызовите скрипт Python:
#!/bin/sh
/start.py
Что такое минимальная настройка для скрипта 'sh' /' python'? Ваш сценарий в порядке, но, возможно, получил ошибку «разрешения». Вы не можете писать 'root_dir' с помощью python, если пользователь не' sudoers' или каталог 'read only'. Попробуйте открыть файл под '/ tmp', вы увидите, что все будет работать. Другим моментом является 'chmod a + x start.py', чем'./Start.py' работать напрямую. – dsgdfg
Скорее всего, вы устанавливаете 'PYTHONPATH' в rc-файлах, которые получены только для интерактивных оболочек входа. Добавьте значение в задачу 'shell' и проверьте. – techraf
@dsgdfg, я не думаю, что это о разрешении скрипта, как я уже сказал, когда я удаляю все инструкции import из скрипта python, он работает даже из-за невозможности, поэтому я предполагаю, что разрешение одобрено. – Jakim