2

Python novice here.

I have a Python script that performs some geodatabase management (reconcile/post versions, compress, etc). I have the following line of code in my script:

createLog = open(str(datetime.date.today()) + ".txt", "w")

along each step of the script I add to the text file with the following statements:

createLog.write("Database connections blocked.\n")

When I run the script in my IDE (PyCharm) I get the desired result: A text file with each step written to the .txt file. When I run it in Task Scheduler no .txt file is created and therefore no log. Everything else runs as far as I can tell. I'm able to track edits made to the data.

I have experienced things like this before with task scheduler but have never been able to resolve the problem in the past.

Any ideas?

4

1 に答える 1

1

これは作業ディレクトリの問題だと思います。Python の open 関数は、スクリプトと同じフォルダーではなく、現在の作業ディレクトリでファイルを開きます。これはよくある誤解です!(Pythonを学んでいるときに私を何年も混乱させた...)

では、作業ディレクトリとは何ですか? 私の親友であるウィキペディアを引用すると、次のようになります。

コンピューティングでは、プロセスの作業ディレクトリは、各プロセスに動的に関連付けられている階層ファイル システムのディレクトリです。プロセスが単純なファイル名または相対パス (ルート ディレクトリからのフル パスで指定されたファイルとは対照的に) を使用してファイルを参照する場合、参照はプロセスの現在の作業ディレクトリに対して相対的に解釈されます。したがって、たとえば、ファイル foo.txt の作成を要求する作業ディレクトリ /rabbit-shoes を使用するプロセスは、ファイル /rabbit-shoes/foo.txt を作成することになります。

(出典: https://en.wikipedia.org/wiki/Working_directory )

では、この作業ディレクトリはどのように選択されるのでしょうか?

そのプロセスの親プロセスによって選択されます。bash などのシェルからプログラムを実行すると、シェル (親プロセス) は、実行中のプログラム (子プロセス) の作業ディレクトリを現在のディレクトリに設定します (つまり、cd'へ)

IDE はスマートで便利なので、Python スクリプト プロセスを開始し、作業ディレクトリをスクリプト自体と同じ場所に設定します。タスクスケジューラはあまり役に立ちません...作業ディレクトリを何に設定しているのかまったくわかりません。ただし、システムを検索すると、ログ ファイルがどこかにあるはずです。

于 2015-12-30T15:59:58.877 に答える