跳到主要內容

發表文章

python 3 無法使用pip安裝套件(WIN 10)

其實預設都會幫我們安裝pip這個管理套件,但是我在安裝完python 3.7後卻無法使用pip來安裝套件。

查詢是否已經有安裝pip:

C:\> python -m pip --version

pip 20.0.2 from C:\Python37\lib\site-packages\pip (python 3.7)

上面顯示我已有安裝pip,版本是20.0.2

如果沒有pip沒有被安裝,可先下載get-pip.py後,以cmd在檔案所在的目錄下執行python get-pip.py
https://bootstrap.pypa.io/get-pip.py

即然我已有安裝pip,那無法執行的原因就有可能是環境變數PATH。

由上面可以得知pythond的安裝目錄在C:\Pyhton37,所以pip的執行檔會C:\Python37\Scripts



將路徑設定到PATH後就可以了。
set PATH=C:\Python37\Scripts;%PATH%

Python套件cx_Oracle出現UnicodeEncodeError: 'ascii' codec錯誤

原本我的電腦已有python腳本連線Oracle資料庫並取得資料,當時是用python 2.7來執行,沒有什麼問題。

最近重灌系統之後,安裝Python 3.7、cx_Oracle套件、Oracle instant client 11.2,都是64位元的版本。

重新執行腳本時卻出現如下的錯誤訊息:
Database Version:11.2.0.4.0
Traceback (most recent call last):
  File "F:\Ora_LineNotify\EBS_Check.py", line 107, in <module>
    cur.execute(SQL02)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 45-46: ordinal not in range(128)

一開始以為是腳本編碼的問題,但是檢查過後文字是以UTF-8編輯的。

詳細看一下錯誤訊息,是在執行SQL2時出現的錯誤,而字串SQL2中只有一個地方有中文字,而且只要把中文改成英文,腳本又正常了
SQL02=("select  to_char(start_time,'yyyy-mm-dd') as \"日期\",status " .....

所以可以確定是cx_Oracle的問題,於是更改搜尋的目標,找到了可能是NLS_LANG的問題。

我可以確定資料庫上是以AMERICAN_AMERICA.ZHT16BIG5來編碼,於python腳本中增加下列程式碼後又恢復正常了。
import os
os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.ZHT16BIG5'

上面主要是設定系統的環境變數NLS_LANG

Windows刪除時出現「此項目已不在XXX位置,請檢查項目位置」

我有一顆外接式硬碟,有一個資料夾在刪除時出現下列的訊息:
「找不到此項目」、「此項目已不在F:\XXX位置,請檢查項目位置,然後再試一次」

可以進入該資料夾,但是裡面已經沒有檔案,重新插拔也無法刪除。

以CMD命令列模式鍵入dir /a查看,多了一些隱藏的資料夾,但是也是無法刪除。

求助網路大神,有人提到可能是檔案位於硬碟壞軌上;另外有人提到一種解法如下,我試了之後已刪除資料夾。

不過這個方法也不是絕對有效,反正就試一試。

1、新建一個文字檔案,並儲存成del.bat,內容如下:
   DEL /F /A /Q \\?\%1
   RD /S /Q \\?\%1

2、將要刪除的資料夾或檔案移到del.bat圖示上就可以了。

也可以直接以CMD命令列鍵入指令來完成,例如刪不掉的資料夾名為test,位於F:\
  C:\> rd /S /Q f:\test

指令del的參數說明(刪除一個或多個檔案):
  /F   強制刪除唯讀檔案。
  /Q   安靜模式,使用全域萬用字元時,不詢問是否要刪除
  /A   根據屬性選取要刪除的檔案

指令rd的參數說明(移除或刪除一個目錄):
  /S   除了目錄本身之外,一併移除指定目錄裡的所有目錄和檔案。用於移除樹狀目錄結構。
  /Q   安靜模式,有 /S 時,刪除目錄樹結構不再要求確認

跨網域代理,解決AJAX CORS的問題

使用JS存取API時,經常會有跨網域(CORS)的錯誤出現。

如對方主機未允許CORS,則前端是無法取得資料,像我只是為了練習而架設一台伺服器來解決CORS,似乎效益太低。

此時可以利用跨網域代理來解決CORS的問題。

網址:https://cors-anywhere.herokuapp.com/

使用的方式也很簡單,將網址加上API就可以取回有CORS限制的資料。

例如:

健保署opendata:https://data.nhi.gov.tw/Datasets/DatasetResource.aspx?rId=A21030000I-D50001-001

程式碼如下:

let opendata = https://data.nhi.gov.tw/Datasets/DatasetResource.aspx?rId=A21030000I-D50001-001
let cors_url = https://cors-anywhere.herokuapp.com/

return_data = ajax(cors_url + opendata);

VNC Client:No supported authentication methods

在準備使用VNC Client工具連上Raspberry Pi時,出現了錯誤 。

訊息是:No supported authentication methods

已確定VNC Server已啟用,Raspberry Pi也沒有問題,最後在一個論壇上找到一段話:
By default, the RealVNC Server uses "UNIX Password" authentication, which allows you to login using system account credentials (e.g. pi/raspberry)

所以嘗試加上一些參數後經測試可以成功連線,指令如下:
# vncserver Authentication=VncAuth AdminPassword=123456 :2

上述指令是說以Vnc自已的帳號來驗證,密碼是123456


Oracle EBS 11i查詢使用的Port

因為要知道EBS 11i有使用到哪些Port,以便網路的設定,故記錄一下。











Solaris Find指令備忘記錄

為了怕自己又忘了該如何以find指令查詢,所以記錄一下。

查詢365天內有修改(更新)的檔案
find . -name "*.fmb" -mtime -365 -exec ls -lh {} \;

查詢365天內有修改(更新)的檔案,排除檔名有含2019的字串
find . -name "*.fmb" ! -name "*2019*" -type f -mtime -365 -exec ls -lh {} \;

查詢365天內有修改(更新)的檔案,排除檔名有含2019的字串之檔案數量
find . -name "*.fmb" ! -name "*2019*" -type f -mtime -365 |awk '{count++}END{print count}'

查詢365天內有修改(更新)的檔案,排除檔名有含2019,並修改查詢結果每行的「./」改為空值,跳脫字元「/」
find . -name "*.fmb" ! -name "*2019*" -type f -mtime -365 -exec ls -lh {} \; | awk '{print $6 " " $7 " " $8 " " ":" " " $3 "  " $9}'|sed 's/\.\///g'

查詢365天內有修改(更新)的檔案,排除檔名有含2019,並且擁有者為testmgr之檔案數量
find . -name "*.fmb" ! -name "*2019*" -type f -mtime -365 -exec ls -lh {} \;|awk '{if($3=="testmgr") {print $3 ; count++}}END{print count}'