cari
Rumahpembangunan bahagian belakangTutorial PythonBagaimanakah saya boleh menjalankan skrip Python dengan keistimewaan yang tinggi pada Windows?

How can I run Python scripts with elevated privileges on Windows?

Menjalankan Skrip dengan Keistimewaan Ditingkatkan pada Windows

Banyak tugas dalam pembangunan aplikasi memerlukan keistimewaan yang tinggi, terutamanya apabila berinteraksi dengan sumber sistem atau melaksanakan operasi pentadbiran. Artikel ini menangani masalah khusus menjalankan skrip dalam Python yang memerlukan akses pentadbiran.

Cabaran

Sampel kod yang disediakan cuba untuk memulakan skrip dengan keizinan tinggi. Walau bagaimanapun, skrip tidak pernah melepasi gesaan kebenaran. Isu ini nampaknya terletak pada salah tanggapan umum mengenai pelaksanaan skrip.

Penyelesaian

Kod yang disediakan adalah berdasarkan andaian bahawa ia boleh meningkatkan sendiri dengan memulakan semula dirinya dengan hak pentadbir . Walau bagaimanapun, pendekatan ini tidak boleh dilaksanakan kerana sifat operasi istimewa dalam Windows. Sebaliknya, kita mesti menggunakan mekanisme luaran untuk meminta ketinggian.

Satu penyelesaian yang sangat berkesan ialah skrip komprehensif yang dicipta oleh Preston Landers pada 2010. Skrip ini membolehkan pengguna menyemak dengan mudah sama ada pengguna semasa mempunyai keistimewaan pentadbiran dan, jika tidak , minta ketinggian UAC. Skrip menyediakan maklum balas visual dalam tetingkap berasingan, menunjukkan tindakan sistem.

Menggunakan Skrip Preston Landers

Skrip boleh disepadukan ke dalam aplikasi utama anda menggunakan coretan berikut:

import admin

if not admin.isUserAdmin():
    admin.runAsAdmin()

Kod skrip penuh boleh didapati di bawah:

#!/usr/bin/env python
# -*- coding: utf-8; mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*-
# vim: fileencoding=utf-8 tabstop=4 expandtab shiftwidth=4

# (C) COPYRIGHT © Preston Landers 2010
# Released under the same license as Python 2.6.5

import sys, os, traceback, types

def isUserAdmin():

    if os.name == 'nt':
        import ctypes
        # WARNING: requires Windows XP SP2 or higher!
        try:
            return ctypes.windll.shell32.IsUserAnAdmin()
        except:
            traceback.print_exc()
            print "Admin check failed, assuming not an admin."
            return False
    elif os.name == 'posix':
        # Check for root on Posix
        return os.getuid() == 0
    else:
        raise RuntimeError, "Unsupported operating system for this module: %s" % (os.name,)

def runAsAdmin(cmdLine=None, wait=True):

    if os.name != 'nt':
        raise RuntimeError, "This function is only implemented on Windows."

    import win32api, win32con, win32event, win32process
    from win32com.shell.shell import ShellExecuteEx
    from win32com.shell import shellcon

    python_exe = sys.executable

    if cmdLine is None:
        cmdLine = [python_exe] + sys.argv
    elif type(cmdLine) not in (types.TupleType,types.ListType):
        raise ValueError, "cmdLine is not a sequence."
    cmd = '"%s"' % (cmdLine[0],)
    # XXX TODO: isn't there a function or something we can call to massage command line params?
    params = " ".join(['"%s"' % (x,) for x in cmdLine[1:]])
    cmdDir = ''
    showCmd = win32con.SW_SHOWNORMAL
    #showCmd = win32con.SW_HIDE
    lpVerb = 'runas'  # causes UAC elevation prompt.

    # print "Running", cmd, params

    # ShellExecute() doesn't seem to allow us to fetch the PID or handle
    # of the process, so we can't get anything useful from it. Therefore
    # the more complex ShellExecuteEx() must be used.

    # procHandle = win32api.ShellExecute(0, lpVerb, cmd, params, cmdDir, showCmd)

    procInfo = ShellExecuteEx(nShow=showCmd,
                              fMask=shellcon.SEE_MASK_NOCLOSEPROCESS,
                              lpVerb=lpVerb,
                              lpFile=cmd,
                              lpParameters=params)

    if wait:
        procHandle = procInfo['hProcess']    
        obj = win32event.WaitForSingleObject(procHandle, win32event.INFINITE)
        rc = win32process.GetExitCodeProcess(procHandle)
        #print "Process handle %s returned code %s" % (procHandle, rc)
    else:
        rc = None

    return rc

def test():
    rc = 0
    if not isUserAdmin():
        print "You're not an admin.", os.getpid(), "params: ", sys.argv
        #rc = runAsAdmin(["c:\Windows\notepad.exe"])
        rc = runAsAdmin()
    else:
        print "You are an admin!", os.getpid(), "params: ", sys.argv
        rc = 0
    x = raw_input('Press Enter to exit.')
    return rc


if __name__ == "__main__":
    sys.exit(test())

Sebagai alternatif, anda kini boleh pasang dan gunakan skrip ini sebagai pakej Python daripada PyPi. Ikuti langkah berikut:

  1. Pasang pakej menggunakan pip install pyuac dan pip install pypiwin32.
  2. Gunakan pakej seperti ini:
import pyuac

def main():
    print("Do stuff here that requires being run as an admin.")
    # The window will disappear as soon as the program exits!
    input("Press enter to close the window. >")

if __name__ == "__main__":
    if not pyuac.isUserAdmin():
        print("Re-launching as admin!")
        pyuac.runAsAdmin()
    else:        
        main()  # Already an admin here.

Atau , gunakan penghias:

from pyuac import main_requires_admin

@main_requires_admin
def main():
    print("Do stuff here that requires being run as an admin.")
    # The window will disappear as soon as the program exits!
    input("Press enter to close the window. >")

if __name__ == "__main__":
    main()

Atas ialah kandungan terperinci Bagaimanakah saya boleh menjalankan skrip Python dengan keistimewaan yang tinggi pada Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Bagaimana untuk melaksanakan mod kilang di Python?Bagaimana untuk melaksanakan mod kilang di Python?May 16, 2025 pm 12:39 PM

Melaksanakan corak kilang di Python boleh membuat pelbagai jenis objek dengan mewujudkan antara muka bersatu. Langkah -langkah khusus adalah seperti berikut: 1. Tentukan kelas asas dan kelas warisan, seperti kenderaan, kereta, pesawat dan kereta api. 2. Buat kenderaan kelas kilang dan gunakan kaedah create_vehicle untuk mengembalikan contoh objek yang sepadan mengikut parameter jenis. 3. Segera objek melalui kelas kilang, seperti my_car = factory.create_vehicle ("car", "tesla"). Corak ini meningkatkan skalabiliti dan mengekalkan kod, tetapi perlu diberi perhatian kepada kerumitannya

Apa maksud r dalam awalan rentetan asal pythonApa maksud r dalam awalan rentetan asal pythonMay 16, 2025 pm 12:36 PM

Di Python, awalan R atau R digunakan untuk menentukan rentetan asal, mengabaikan semua watak yang melarikan diri, dan membiarkan rentetan ditafsirkan secara harfiah. 1) Berkenaan untuk menangani ekspresi biasa dan laluan fail untuk mengelakkan salah faham watak -watak melarikan diri. 2) Tidak berkenaan dengan kes -kes di mana watak -watak yang melarikan diri perlu dipelihara, seperti rehat garis. Pemeriksaan berhati -hati diperlukan apabila menggunakannya untuk mengelakkan output yang tidak dijangka.

Bagaimana untuk membersihkan sumber menggunakan kaedah __Del__ di Python?Bagaimana untuk membersihkan sumber menggunakan kaedah __Del__ di Python?May 16, 2025 pm 12:33 PM

Di Python, kaedah __Del__ adalah pemusnah objek, yang digunakan untuk membersihkan sumber. 1) Masa pelaksanaan yang tidak menentu: Bergantung pada mekanisme pengumpulan sampah. 2) Rujukan Pekeliling: Ia boleh menyebabkan panggilan tidak dapat segera dan dikendalikan dengan menggunakan modul lemah. 3) Pengendalian Pengecualian: Pengecualian yang dibuang dalam __Del__ boleh diabaikan dan ditangkap menggunakan blok percubaan. 4) Amalan terbaik untuk pengurusan sumber: Adalah disyorkan untuk digunakan dengan kenyataan dan pengurus konteks untuk menguruskan sumber.

Penggunaan fungsi pop () dalam senarai python senarai elemen pop penyingkiran penjelasan terperinci mengenaiPenggunaan fungsi pop () dalam senarai python senarai elemen pop penyingkiran penjelasan terperinci mengenaiMay 16, 2025 pm 12:30 PM

Fungsi pop () digunakan dalam python untuk menghapuskan elemen dari senarai dan mengembalikan kedudukan yang ditentukan. 1) Apabila indeks tidak ditentukan, pop () membuang dan mengembalikan elemen terakhir senarai secara lalai. 2) Apabila menentukan indeks, pop () membuang dan mengembalikan elemen pada kedudukan indeks. 3) Perhatikan kesilapan indeks, isu prestasi, kaedah alternatif dan kebolehubahan senarai apabila menggunakannya.

Bagaimana cara menggunakan python untuk pemprosesan imej?Bagaimana cara menggunakan python untuk pemprosesan imej?May 16, 2025 pm 12:27 PM

Python terutamanya menggunakan dua bantal perpustakaan utama dan OpenCV untuk pemprosesan imej. Bantal sesuai untuk pemprosesan imej yang mudah, seperti menambah tanda air, dan kodnya mudah dan mudah digunakan; OpenCV sesuai untuk pemprosesan imej yang kompleks dan penglihatan komputer, seperti pengesanan kelebihan, dengan prestasi unggul tetapi perhatian kepada pengurusan ingatan diperlukan.

Bagaimana untuk melaksanakan analisis komponen utama dalam Python?Bagaimana untuk melaksanakan analisis komponen utama dalam Python?May 16, 2025 pm 12:24 PM

Melaksanakan PCA di Python boleh dilakukan dengan menulis kod secara manual atau menggunakan perpustakaan Scikit-learn. Secara manual melaksanakan PCA termasuk langkah -langkah berikut: 1) Memusatkan data, 2) Kirakan matriks kovarians, 3) Kirakan nilai eigen dan vektor eigen, 4) Susun dan pilih komponen utama, dan 5) Projek data ke ruang baru. Pelaksanaan manual membantu memahami algoritma secara mendalam, tetapi Scikit-Learn menyediakan ciri-ciri yang lebih mudah.

Bagaimana cara mengira logaritma dalam python?Bagaimana cara mengira logaritma dalam python?May 16, 2025 pm 12:21 PM

Mengira logaritma dalam Python adalah perkara yang sangat mudah tetapi menarik. Mari kita mulakan dengan soalan yang paling asas: bagaimana mengira logaritma dalam python? Kaedah asas untuk mengira logaritma dalam python Modul matematik Python menyediakan fungsi untuk mengira logaritma. Mari kita ambil contoh mudah: importmath# mengira logaritma semulajadi (asas adalah e) x = 10natural_log = math.log (x) cetak (f "log semula jadi ({x}) = {natural_log}")

Bagaimana untuk melaksanakan regresi linear di Python?Bagaimana untuk melaksanakan regresi linear di Python?May 16, 2025 pm 12:18 PM

Untuk melaksanakan regresi linear di Python, kita boleh bermula dari pelbagai perspektif. Ini bukan sekadar panggilan fungsi yang mudah, tetapi melibatkan penggunaan statistik, pengoptimuman matematik dan pembelajaran mesin yang komprehensif. Mari kita menyelam proses ini secara mendalam. Cara yang paling biasa untuk melaksanakan regresi linear di Python adalah menggunakan perpustakaan Scikit-learn, yang menyediakan alat yang mudah dan cekap. Walau bagaimanapun, jika kita ingin mempunyai pemahaman yang lebih mendalam tentang prinsip -prinsip dan butiran pelaksanaan regresi linear, kita juga boleh menulis algoritma regresi linear kita sendiri dari awal. Pelaksanaan regresi linear SCIKIT-Learn menggunakan SCIKIT-Learn untuk merangkum pelaksanaan regresi linear, yang membolehkan kita dengan mudah memodelkan dan meramalkan. Berikut adalah penggunaan sc

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa