簡體   English   中英

Popen 不接受 proc.communicate 的輸入,如何執行 function 要求輸入 python 的密碼?

[英]Popen does not take input from proc.communicate how to execute function that asks for a password with python?

        text="odoo15"
        message=text.encode()
        

        proc = Popen(["psql",
        "-h","localhost",
        "-d", "database", 
        "-U", "User", 
        "-f", "/path/dump.sql"], stdin=PIPE)

        proc.communicate(input=message)

在執行該代碼之前,我使用 psycopg 與數據庫連接。 我想將 sql 代碼從文件執行到數據庫中,以創建表並用來自啞文件的數據填充它們。 我遇到的麻煩是我仍然需要在控制台中手動輸入密碼才能使此代碼起作用。 我不明白為什么它沒有從 proc.communicate 獲取密碼。 我會非常感謝一些幫助。

我還嘗試使用 subprocess.run 並將輸入作為參數,但遇到了同樣的問題。 我的第一個想法是使用 psql 中的 /i 命令,但由於我無法在 psycopg 中執行 psql,所以它不起作用。 我也試過: cursor.execute(open("/path/dump.sql", "r").read())os.system("sudo -u user psql database < /path/dump.sql")但是第一個無法執行,因為我的文件中有\,第二個也沒有工作。

如果你想避免這一切,你可以直接設置PGPASSWORD env var。 執行此操作時,CLI 不會要求輸入密碼。

您可以通過多種方式執行此操作:

  1. export PGPASSWORD=yourpassword
  2. proc = Popen(["PGPASSWORD=yourpassword", "psql",...
  3. PGPASSWORD=yourpassword python yourscript.py
  4. 在您的 python 腳本中, import os; os.environ["PGPASSWORD"] = "yourpassword" import os; os.environ["PGPASSWORD"] = "yourpassword"
  5. 僅修改子進程的 env var

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM