2

ubuntu の python スクリプトを使用して cron ジョブを実行しようとすると、問題が発生します。これは私がやったことです:

1.) シンプルな tkinter アプリを作成しました: コードのソースはこの URL からのものです - http://www.ittc.ku.edu/~niehaus/classes/448-s04/448-standard/simple_gui_examples/sample.py

#!/usr/bin/python
from Tkinter import *
class App:
    def __init__(self,parent):
        f = Frame(parent)
        f.pack(padx=15,pady=15)
        self.entry = Entry(f,text="enter your choice")
        self.entry.pack(side= TOP,padx=10,pady=12)
        self.button = Button(f, text="print",command=self.print_this)
        self.button.pack(side=BOTTOM,padx=10,pady=10)
        self.exit = Button(f, text="exit", command=f.quit)
        self.exit.pack(side=BOTTOM,padx=10,pady=10)

    def print_this(self):
        print "this is to be printed"

root  = Tk()
root.title('Tkwidgets application')
app = App(root)
root.mainloop()

2.) スクリプトを実行可能に変更しました。

chmod 777 sample.py

3.) テスト目的で毎分実行されるスクリプトを cronjob に追加しました。crontab -e を開き、ファイルに以下を追加しました。

 * * * * * /home/bbc/workspace/python/tkinter/sample.py 

4.) 免責事項: tkinter の環境変数を追加したり、/etc/init.d/cron にある cronjob スクリプトを変更したりしませんでした。

5.) tail -f /var/log/syslog を実行して cron ジョブを追跡していました

$ tail -f /var/log/syslog
Jul  7 18:33:01 bbc CRON[11346]: (bbc) CMD (/home/bbc/workspace/python/tkinter/sample.py)
Jul  7 18:33:01 bbc CRON[11343]: (CRON) error (grandchild #11344 failed with exit status 1)
Jul  7 18:33:01 bbc CRON[11343]: (CRON) info (No MTA installed, discarding output)
Jul  7 18:33:01 bbc CRON[11342]: (CRON) error (grandchild #11346 failed with exit status 1)
Jul  7 18:33:01 bbc CRON[11342]: (CRON) info (No MTA installed, discarding output)

この問題のデバッグに関するヘルプは大歓迎です...

4

3 に答える 3

3

ここで何が起こるかわかりません。cronjob は、GUI を表示できるディスプレイにアクセスできないため、ボタンは表示されず、print_this実行されません。

FWIW、あなたのコードを実行しようとすると、エラーが発生しました:

  File "./t.py", line 4
    def __init__(self,parent):
      ^
IndentationError: expected an indented block

ページへのコピー/貼り付けが原因なのか、それともコードの実際の問題なのかはわかりません。

于 2013-07-08T01:44:53.190 に答える
1

crontab を使用して bash ファイルを実行します

30 12 * * 1,2,3,4,5 /ホーム/エドワード/SSF/SW/EODWD.sh

ターミナルで -- crontab -e を使用

bash ファイルは、必要な数の他のプログラムを実行します

/home/edward/SSF/SW/EODWD.py >> /home/edward/Desktop/eodmail.log 待機

この例では、EODWD.py のすべての print ステートメントもログ ファイルに自動的に送信されます。

次のコマンドを実行する前に、wait ステートメントによって競合が強制されます。

これは、両方のファイル ( *.py & *.sh ) が実行可能になっている場合にのみ機能します

于 2013-07-21T18:22:35.867 に答える