2017-01-26 11 views
0

私は実行するたびにユーザーとやり取りするPythonスクリプト、たとえばtest.pyを持っています。私はこのスクリプトを5分ごとに実行したいインタラクティブなPythonスクリプトをcronジョブとして実行するには?

test.py

#!/usr/bin/env python3 

def foo(): 
    a = input() 
    print("Hello, {}".format(a)) 

if __name__ == '__main__': 
    foo() 

。だから、私はそれを私のcrontabに追加しようとしましたが、私は入力を入力するように求められていないので、これは動作しないようです。
私はcrontabをテストして正常に動作しています。

このタスクにはscheduleなどのライブラリを使用する必要がありますか?
このシナリオでは、理想的な方法は何でしょうか?
注:MacOSXとGNU/Linuxで動作するクロスプラットフォームソリューションが必要です。

+0

のようになります。あなたが必要ですか?それは環境変数で解決できますか? –

+0

@RafaelBarros 'input'は 'World'から 'Rafael'までの任意の文字列です。だから、私はこれが環境変数を使って解決できるとは思わない。さらに、これは単なるプロトタイプコードです。 –

+1

cronまたはscheduleを介して実行している場合は、端末上で実行されないため、対話型にすることはできません。プロンプトは表示されません。または私は何かを逃していますか? 5分の遅延を入れたいだけなら、Linuxの "スリープ"コマンドやPythonの "time.sleep"コマンドを使ってみましたか? – RobertB

答えて

1

あなたは、Pythonモジュールpexpect(http://pexpect.sourceforge.net/doc/)を試みることができる - の使用のようなものです:サーバー上で対話的にcronの相互作用を持っている

import pexpect 
child = pexpect.spawn(script/python file etc...) 
child.expect('Here goes the prompt you would expect') 
child.sendline('What you want to send to it') 
0

そのことはできません。

は、アプリケーションをDelink: セットアップ(MySQLのような)デシベルは、新しいエントリをDBに行われるかどうかを確認するためにcronを介して、5分ごとにtest.pyの実行を持っています。そして、ユーザープロンプトの情報を保存し、ローカルアプリケーションを持っていますあなたのデータベースに。

0

cronまたはスケジュールで実行している場合は、端末で実行されていないため、バックグラウンドプロセスとして実行されます。したがって、インタラクティブにすることはできず、プロンプトも表示されません。

遅延を5分にしたい場合は、Linuxの「スリープ」コマンドを参照するか、pythonの「time.sleep」を使用してください。このようにして、端末を開いたままにして、ジョブを間隔で実行させることができます。それをシンプルに保つために

#!/usr/bin/env python3 
import time 

def foo(): 
    a = input() 
    print("Hello, {}".format(a)) 

if __name__ == '__main__': 
    while True: 
     foo() 
     time.sleep(300) # Sleeps 300 seconds 
0

スクリプトを取得し、crontabの中にいることを使用することができます。

#!/bin/bash 
/usr/bin/python3 /home/user/project/test.py << EOF 
some input here 
EOF 

あなたのcrontabが入力されているものを

* * * * * /home/user/project/test.sh >> /home/user/project/LOG 2>&1 
関連する問題