suPass
沒有在test.py
的範圍內定義,只有main.py
。爲了test.py
要注意suPass
你初始化子的時候需要在把它作爲一個參數變量,因此,通過它在隨着指定參數和改變test.py
,以反映這一點:
from sys import argv
suPass = argv[1] # we use the second index of argv, as the first index
# is actually the name of the script, test.py
print suPass
現在,在子電話加入suPass
到你的論點:
subprocess.Popen(['python', 'test.py', suPass])
現在,如果你想以某種方式保存此密碼安全,你可以使用hashlib
,binascii
和os.urandom
來生成密碼哈希值:
import hashlib
import binascii
from os import urandom
import getpass
salt = os.urandom(64) # where 64 can be any number of bytes, this is just
# a random bytes object for making the hash more secure
# make sure to keep it when checking a user's password input
# or the generated hash will not match!
# get a new password, and convert it to the bytes type to make it easier later
new_password = bytes(getpass.getpass('Enter a password: '), encoding='UTF-8')
# this code generates a bytes object using hashlib.pbkdf2_hmac and
# converts it to hexadecimal format with binascii.hexlify
new_hash = binascii.hexlify(hashlib.pbkdf2_hmac('sha512', new_password, salt, 100000)
print(new_hash)
new_hash
和salt
可以保存到一個文件(或數據庫或其他存儲介質),你可以在一個新的程序加密以後,用戶的密碼輸入,然後將哈希與存儲在文件中的內容進行比較。
這裏是Python Docs Example。
1)。你爲什麼試圖通過'subprocess'執行python代碼。爲什麼不把代碼正確地封裝到函數中,導入腳本並調用函數? 2)。一旦你有密碼,你打算如何使用它? 'su' /'sudo'不允許你將密碼作爲變量提交,它**必須通過終端提供,而且你不能將其傳給它們。 –
哦,我在做什麼,是從終端執行腳本,然後我創建一個shell來運行su命令 – JvK92
好的。看起來我錯了:您可以使用'-S'選項將密碼傳遞給'sudo',如[此處](http://superuser.com/a/67766)所示。不過,我認爲只需製作一個運行Python腳本的簡單bash腳本,並使用su或sudo運行該bash腳本會更安全(也更簡單)。 –