2017-02-15 13 views
3

У меня есть простая игра-версия, которая вызовет скрипт оболочки на удаленном сервере, сценарий оболочки вызовет другой скрипт 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  
+0

Что такое минимальная настройка для скрипта 'sh' /' python'? Ваш сценарий в порядке, но, возможно, получил ошибку «разрешения». Вы не можете писать 'root_dir' с помощью python, если пользователь не' sudoers' или каталог 'read only'. Попробуйте открыть файл под '/ tmp', вы увидите, что все будет работать. Другим моментом является 'chmod a + x start.py', чем'./Start.py' работать напрямую. – dsgdfg

+0

Скорее всего, вы устанавливаете 'PYTHONPATH' в rc-файлах, которые получены только для интерактивных оболочек входа. Добавьте значение в задачу 'shell' и проверьте. – techraf

+0

@dsgdfg, я не думаю, что это о разрешении скрипта, как я уже сказал, когда я удаляю все инструкции import из скрипта python, он работает даже из-за невозможности, поэтому я предполагаю, что разрешение одобрено. – Jakim

ответ

0

извините, это мой плохой, я не ставил все скрипты здесь, кажется, что есть еще один сценарий, который имеет такие вещи, как

#!/bin/sh 
/start & >> stdout.log 

Это вызвало проблему, Я предполагаю, что первые три импортированных модуля имеют отношение к стандарту io, поэтому в решении используется nohup.

снова, очень жаль неполный вопрос.