Jadi masalah saya adalah sebagai berikut:
Saya menggunakan versi python dengan perpustakaan utama saya, untuk melakukan sesuatu yang saya butuhkan untuk berinteraksi dengan perpustakaan python program. Program itu dilengkapi dengan .bat
file yang mengatur variabel dan mulai python.
Apa yang ingin saya lakukan dari python utama saya adalah sebagai berikut:
- panggil
.bat
mengajukan - Dari sesi python dibuat
import
fungsi kustom saya - Kirim input ke saya fungsi khusus (kebanyakan daftar string)
- Hentikan instance python baru setelah data diproses
Bagaimana hal seperti itu dapat dilakukan dari python? Haruskah saya jangkar diri ke prompt cmd yang dibuat untuk dapat mengirim perintah ke instance python baru? Akan os
atau subprocess
masih layak atau akankah saya perlu membuat sesuatu seperti skrip PowerShell untuk menyerahkan semuanya?
Terima kasih.
windows
command-line
batch
python
Al rl
sumber
sumber
Pid = os.getpid()
danDETACHED_PROCESS = 0x00000008
danRunScript = "C:/Folder/Path/VerifyPID.cmd"
danCmd = ["cmd.exe", "/C", RunScript, sys.argv[0], TagName, host, RootPath, str(Pid)]
dansubprocess.Popen(Cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, creationflags=DETACHED_PROCESS)
.... Mungkin itu akan memberi Anda ide kasar tetapi saya punya lebih banyak contoh jika diperlukan. Sekali lagi saya tidak 100% yakin tetapi berpotensi sesuatu di sepanjang garis ini akan membantu.%~1
melalui%~5
dasarnya.Jawaban:
Jadi saya pikir saya menemukan cara untuk menyelesaikan ini karena tampaknya subproses terus menerus itu cukup mudah.
Berikut adalah kode yang saya gunakan:
Saya menggunakan stdin.write karena itu adalah satu-satunya cara untuk mengirim banyak perintah daripada harus memulai kembali proses python saya untuk setiap contoh, dan saya juga telah membuat mode yang menggabungkan semuanya bersama-sama agar semuanya ditangani oleh
communicate
.Sebagai contoh, input fungsi dapat:
EDIT_ hal penting untuk dipertimbangkan
Bagi siapa pun yang berencana untuk mengandalkan ini, jika Anda berencana untuk mengirim string ada 2 hal penting untuk dipertimbangkan!
['"',"'",'\'',"\"","\'",'\"',"""'""",'''"''']
\
di dalamnya, tambahkan'r'
ke awal string sehingga encode akan menafsirkannya sebagai string mentah dan tidak membuang kesalahan yang disebabkan oleh\
dan karakter di sekitarnya.sumber