Python 中a.py和./a.py兩種執行方式的不同之處是什麼?

在安裝protobuf的時候出現過這種情況:第一種可以跑,第二個就提示找不到module。
這能不能說明這兩種情況有區別,有什麼區別?
2011-7-11補充:
列印path發現兩種方式列印的不同,我想知道為什麼會出現不同。。。
順便看看問題的評論


難道是(在 $PATH 里找到的第一個) python 不是 /usr/bin/python(或者其它 #! 後面所指向的可執行文件)?


一般來說是沒有區別的,不知道你的第二種方式文件的頭行注釋寫的是哪個版本的python
可以嘗試改為
#!/usr/bin/env python


無法使用./a.py有兩個可能:

  1. 沒有給這個腳本賦可執行許可權:$ chmod a+x a.py
  2. 腳本開頭沒有指定解釋器: #!/usr/bin/env python

python ./a.py表示在當前目錄執行,python a.py會在壞境變數目錄下執行a.py。
如果文件不在環境變數目錄下,應該使用路徑(絕對或相對)


第二種方式要確保文件有可執行許可權


a.py 採用當前環境變數的Python編譯執行。./a.py運行當前目錄的可執行腳本。


直接用python這個命令執行該腳本會獲取當前的環境變數env
而。/這種方式單純的向系統指明了直譯器而已,fork出的子進程沒有環境變數的改變。


直接運行 a.py 時系統把它當命令了怎麼辦。


推薦閱讀:

TAG:Python | Linux | protobuf | Shell編程開發 |