Windows - เรียกใช้กระบวนการบนพื้นหลังหลังจากปิด cmd


13

ฉันมีสคริปต์ Python ที่ฉันต้องการเรียกใช้เป็นกระบวนการพื้นหลังใน Windows

ฉันสามารถทำได้บน Linux ด้วย:

python script.py &

แล้วตัดการเชื่อมต่อกระบวนการจากเทอร์มินัลด้วย:

disown

บน Windows สิ่งที่ฉันมีคือ:

start /b python script.py

อย่างไรก็ตามถ้าฉันปิดหน้าต่าง CMD สคริปต์จะหยุดทำงาน มีคำสั่งพิเศษที่ฉันหายไปที่นี่เพื่อให้สคริปต์ทำงานบนพื้นหลังหรือไม่

คำตอบ:


5

startควรเป็นทิศทางที่ถูกต้องอยู่แล้ว อย่างไรก็ตาม/bแนบกับคอนโซลเดียวกัน ตอนนี้ปัญหาคือว่าเมื่อปิดหน้าต่างคอนโซลกระบวนการใด ๆ ที่เกี่ยวข้องกับคอนโซลนี้ก็จะถูกปิดเช่นกัน

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

อย่างไรก็ตามในกรณีนี้คุณจะไม่เห็นเอาต์พุต stdout / stderr อีกต่อไป คุณสามารถเปลี่ยนเส้นทางไปยังไฟล์โดยห่อไว้ในการcmd /c your_command > stdout.txt 2> stderr.txtโทรและเริ่มต้นด้วยวิธีการดังกล่าวข้างต้น (VBScript เครื่องมือของบุคคลที่สาม, ... )

หรือคุณสามารถซ่อนหน้าต่างคอนโซลของคุณเองก่อนที่คุณจะออก ฉันเพิ่งเขียนโปรแกรมบรรทัดเดียวเล็กน้อยซึ่งทำตรงนั้น (ซอร์สโค้ดเป็นพื้นShowWindow(GetConsoleWindow(), SW_HIDE)): http://share.cherrytree.at/showfile-24286/hide_current_console.exe

วิธีนี้คุณสามารถใช้start /bและเมื่อคุณต้องการ "ปิด" คอนโซลของคุณ (ซ่อนทางเทคนิค) คุณจะเรียกใช้hide_current_console & exitซึ่งจะซ่อนคอนโซลแล้วปิดกระบวนการ cmd.exe (ไม่ใช่กระบวนการหลาม) - ในหนึ่งบรรทัด เนื่องจากคุณไม่สามารถพิมพ์exitหลังจากคอนโซลถูกซ่อนอยู่แล้ว


-1

ฉันพบว่าต่อไปนี้ทำงานได้ดีสำหรับฉัน:

run python script.py

1
Oh, และบน Linux แทนของพื้นหลัง ( &) และฉันจะแนะนำให้ใช้disown nohup
nikc

4
คำสั่งนั้นเข้าสู่เชลล์ Windows cmd จะให้ข้อผิดพลาดดังต่อไปนี้: 'run' is not recognized as an internal or external command, operable path or batch file..
markshep
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.