2010-11-02 120 views
5

我想從cron運行一個python腳本,但它沒有正常運行,所以我假設它的不同路徑env變量。無論如何改變python腳本中的變量?如何修改python腳本中的系統路徑變量?

+1

您應該提供操作系統詳細信息。此外,這看起來很像一個可能的重複 - 我建議更難搜索。 – 2010-11-02 19:26:08

+0

「不正常運行」是什麼意思?你確定你甚至開始你的腳本(即它可以找到你的python二進制文件) – 2010-11-02 19:32:49

+0

我正在做很多Popen的程序,沒有與他們的路徑。 – 2010-11-02 19:34:06

回答

4

您不應該在python腳本中設置PATH。 相反,把類似

USER=joe 
HOME=/home/joe 
SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/some/other/path 
PYTHONPATH=/home/joe/pybin 
MAILTO=joe 
LANG=en_US.UTF-8 

#min hr day mon dow 
*/5 12 *  * *  reminder.py 'Eat lunch' 

在您的crontab頂部。這些環境變量將可用於通過crontab運行的所有cron作業。

+0

在下面的cron作業的頂部? – 2010-11-02 19:33:26

+0

@Joe:是的;位於頂部,下方有cron作業線。 – unutbu 2010-11-02 19:33:51

9

@ubuntu有正確的方法,但對於它的價值,@Joe蠢貨,如果你需要的信息:

import sys 
print sys.path 
['.', '/usr/local/bin', '/usr/local/lib/python2.6/dist-packages',...] 
sys.path.append('/home/JoeBlow/python_scripts') 
print sys.path 
['.', '/usr/local/bin', '/usr/local/lib/python2.6/dist-packages', '/home/JoeBlow/python_scripts',...] 

sys.path是在你的初始化腳本的PYTHONPATH數組包含一切變量(或者你的shell的默認PYTHONPATH)。

8

雖然接受的答案適用於OP的目的,而第二個答案是正確的更新python sys.path變量,我認爲,如果OP不能使用接受的答案(因爲,有一個針對修改/測試機器上的OS PATH變量的策略),像this SO answer這樣的東西就是他們正在尋找的東西。這裏總結了簡單的情況下,改變OS PATH環境變量:

app_path = os.path.join(root_path, 'other', 'dir', 'to', 'app') 
os.environ["PATH"] += os.pathsep + app_path 

至少,這是我希望能找到我讀的問題。

+0

對於你想要設置PATH的情況(和PYTHONPATH是類似的代碼),雖然請注意sys.path和os.environ ['PATH']是/可以是不同的。 – ntg 2017-11-20 11:22:01