1. 程式人生 > >linux下python指令碼檔案的執行與編碼解析

linux下python指令碼檔案的執行與編碼解析

一、

先將終端所在路徑切換到python指令碼檔案的目錄下

然後給指令碼檔案執行許可權,一般755就OK,如果完全是自己的私人電腦,也不做伺服器什麼的,給777的許可權問題也不大(具體許可權含義參考chmod指令的介紹,就不贅述了):
chmod 755 ./*.py
然後執行。
如果在指令碼內容的開頭已經給出了類似於如下的註釋:
#!/usr/bin/env python
那就可以直接在終端裡執行:
./*.py
如果沒有這個註釋
就在終端中執行:
python ./*.py
如果是有圖形介面的指令碼
在前面的chmod之後,直接雙擊(KDE桌面是單擊)檔案來執行即可
追問
如果把檔案1.py放到tmp資料夾中,如何執行?命令能寫具體一點嗎?指令碼內容的開頭有:#!/usr/bin/env python
回答
那就直接執行(假設你的檔名是A.py):
/tmp/A.py
或先切換目錄,再執行:
cd /tmp
./A.py
如果該檔案需要修改跟使用者許可權下的一些檔案或目錄
就將自身提升為跟使用者許可權:
sudo /tmp/A.py
或直接將自身提升為跟使用者再執行:
su root
/tmp/A.py
另:Ubuntu等發行版預設不支援su root的操作,只能用sudo
追問
把A.py檔案放入tmp資料夾中 
執行sudo /tmp/A.py 出現如下提示sudo:/tmp/A.py:command not found
執行/tmp/A.py    出現如下提示:-bash:/tmp/A.py:permission denied
使用cd /tmp 然後執行出現提示和上面一樣,不知道是怎麼回事,是我哪裡弄錯了?
回答
這樣的話,我知道的一般有兩種情況:
1.
檔案開頭沒有執行註釋:#!/usr/bin/env python
但你之前說有這一行
2.
就是沒用chmod
上面說了,最開始要給指令碼設定許可權
如果電腦是你一個人用,那就chmod 777 /tmp/A.py就好了
如果還有別人用,就給個chmod 755 /tmp/A.py好了
這個chmod和後面提到的哪個sudo兩個都是關於許可權的命令,但是是不同的,互相也沒什麼關係

簡單點說:chmod的許可權是決定誰有權去碰這個指令碼(讀、寫、執行),而sudo的許可權決定的是這個指令碼有權去碰誰。

二、

指令碼語言的第一行,目的就是指出,你想要你的這個檔案中的程式碼用什麼可執行程式去執行它,就這麼簡單
#!/usr/bin/Python是告訴作業系統執行這個指令碼的時候,呼叫/usr/bin下的python直譯器;
#!/usr/bin/env python這種用法是為了防止作業系統使用者沒有將python裝在預設的/usr/bin路徑裡。當系統看到這一行的時候,首先會到env設定裡查詢python的安裝路徑,再呼叫對應路徑下的直譯器程式完成操作。
#!/usr/bin/python相當於寫死了python路徑;
#!/usr/bin/env python會去環境設定尋找python目錄,推薦這種寫法

三、

系統預設字元編碼為ASCII編碼,所以當指令碼中包含中文字元時要在#!/usr/bin/env python下加一行

# -*- coding: utf-8 -*-