ฉันจะเรียกกล่องโต้ตอบสำหรับการตรวจสอบได้อย่างไร


13

ฉันกำลังเขียนโปรแกรม gui โดยใช้โมดูล wx ในหลาม ในโปรแกรมเมื่อใดก็ตามที่ฉันเข้าถึงโฟลเดอร์ที่ต้องใช้สิทธิ์รูทจากนั้นจะถามรหัสผ่านที่เทอร์มินัล แต่ฉันต้องการแสดงข้อความโต้ตอบกับผู้ใช้เพื่อป้อนรหัสผ่านและรับรองความถูกต้องของเขา จะเรียกกล่องโต้ตอบนั้นและรับรองความถูกต้องของผู้ใช้ใน Ubuntu ได้อย่างไร


คุณเขียนว่ามัน "ถามรหัสผ่านที่ terminal" นั่นหมายความว่าคุณกำลังเรียกคำสั่ง sudo terminal จาก python หรือไม่?
TLE

ฉันคิดว่าเป็นไปได้ว่าคุณควรใช้ PolicyKit แทนsudoแต่ฉันไม่มีความรู้เกี่ยวกับ Python หรือ PolicyKit เพียงพอที่จะเขียนคำตอบที่ดีเพื่ออธิบายวิธีการ บางทีคนอื่นสามารถ
Eliah Kagan

คุณจะใช้สิ่งนี้อย่างไร เพียงแค่ดำเนินการคำสั่ง
เดซี่

คำตอบ:


9

มีสอง Q ที่แตกต่างกันและ ณ วันที่ StackOverflow การตอบคำถามของคุณ: ที่นี่และที่นี่

คำตอบทั้งสองใช้คำสั่งgksudo(กล่าวถึงแล้วโดย @khamer) หากคุณเรียกใช้gksudo command(โดยไม่มีไพ ธ อน) โดยทั่วไปแล้วมันจะทำสิ่งที่sudoทำ แต่มีส่วนต่อประสานกราฟิก - เช่นขอรหัสผ่านจากผู้ใช้จากนั้นเรียกใช้คำสั่งแบบรูทหากผู้ใช้อยู่ในไฟล์ sudoers

ในการใช้งานโซลูชันที่แนะนำจากคำตอบที่เชื่อมโยงในไพ ธ อนคุณสามารถใช้บางสิ่งดังแสดงในตัวอย่างต่อไปนี้:

สร้างไฟล์run.py:

#!/usr/bin/python

import subprocess
subprocess.call(['gksudo','python create.py'])

และไฟล์create.py:

#!/usr/bin/python

# Create test file..
f = file("mytestfile", "w")

จากนั้นเรียกใช้python run.pyและหลังจากที่คุณป้อนรหัสผ่านของคุณระบบจะสร้างไฟล์ที่ root เป็นเจ้าของ หากคุณเรียกใช้python create.pyมันจะเป็นของคุณ (ไฟล์ไม่ควรมีอยู่ก่อนที่จะเรียกใช้สคริปต์)


3

ในขณะที่ฉันแน่ใจว่ามีวิธีการที่หลามเพ้อฝันมากขึ้นรุ่นลงและสกปรกคือการใช้ gksudo gksudo ทำสิ่งเดียวกันกับ sudo ยกเว้นว่าจะสร้างกล่องโต้ตอบสำหรับการตรวจสอบสิทธิ์ที่คุณพูดถึงแทนที่จะถามในบรรทัดคำสั่ง

ดูhttps://help.ubuntu.com/community/RootSudo#Graphical_sudo


เนื่องจากนี่เป็นคำถามเกี่ยวกับการเขียนโปรแกรมสำหรับ Ubuntu ใน Python คุณสามารถยกตัวอย่างโค้ดที่แสดงวิธีใช้gksu/ gksudoในโปรแกรม Python ได้หรือไม่?
Eliah Kagan

@EliahKagan ฉันเขียนคำตอบด้วยตัวอย่างที่หวังว่าจะตอบสนองความต้องการของคุณ! :)
lumbric

0

แทรกสคริปต์นี้ในรหัสของคุณ:

import os

Password = raw_input('Please enter your root password!')

sudo_command = '<your command>'

execute = os.system('echo %s|sudo -S %s' % (Password, sudo_command))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.