Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Hantaran Pembolehubah Gagal dalam `subprocess.Popen()` dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Hantaran Pembolehubah Gagal dalam `subprocess.Popen()` dan Bagaimana Saya Boleh Membetulkannya?

Mary-Kate Olsen
Lepaskan: 2024-11-28 22:17:13
asal
229 orang telah melayarinya

Why Does Variable Passing Fail in `subprocess.Popen()` and How Can I Fix It?

Menyelesaikan Masalah Melepasi Pembolehubah dalam subproses. Argumen Popen()

Apabila menggunakan subproses.Popen() untuk memanggil skrip Python yang lain, menghantar pembolehubah sebagai argumen boleh menghadapi isu yang tidak dijangka. Mari kita siasat mengapa ini mungkin berlaku dan cara menyelesaikannya.

Kod yang disediakan menunjukkan percubaan untuk melaksanakan skrip mytool.py dengan argumen yang disimpan dalam pembolehubah. Walau bagaimanapun, parameter shell=True mungkin menghalang pelaksanaan.

Penyelesaian:

Untuk mendayakan lulus pembolehubah yang berjaya, tinggalkan shell=parameter True. Di bawah persekitaran Unix, mendayakan shell=True mengubah suai cara Popen() mentafsir hujah, yang berpotensi mengakibatkan tingkah laku yang tidak diingini.

Berikut ialah coretan kod yang diubah suai yang menangani isu ini:

import sys
from subprocess import Popen, PIPE

# populate list of arguments
args = ["mytool.py"]
for opt, optname in zip("-a -x -p".split(), "address port pass".split()):
    args.extend([opt, str(servers[server][optname])])
args.extend("some additional command".split())

# run script
p = Popen([sys.executable or 'python'] + args, stdout=PIPE)
# use p.stdout here...
p.stdout.close()
p.wait()
Salin selepas log masuk

Nota Keselamatan:

Menggunakan shell=True untuk arahan yang melibatkan input luaran adalah bahaya keselamatan. Seperti yang dinyatakan dalam dokumentasi Python, amalan ini tidak digalakkan kerana potensi kelemahan.

Atas ialah kandungan terperinci Mengapa Hantaran Pembolehubah Gagal dalam `subprocess.Popen()` dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan