commandwrapper เป็นโมดูลหลามห่อคำสั่งเชลล์เป็นวัตถุเกลียวหลาม
การใช้งาน:
คุณต้องการที่จะเปิดตัวคำสั่งทุบตีต่อไปนี้ในหัวข้อ:
ผู้ใช้ [@ localhost ~] $ ls-l | grep pdf | wc -l
5
นี่คือวิธีที่คุณสามารถทำมันได้
>>> Ls = WrapCommand ('LS-l')
>>> GrepPdf = WrapCommand ('grep pdf')
>>> ห้องสุขา = WrapCommand ('wc -l')
>>> Wc.stdin = GrepPdf
>>> GrepPdf.stdin = แอลเอส
>>> Wc.start ()
>>> สิ่ง #Do
...
>>> Wc.join ()
>>> Wc.results
('5 n', '')
สถานที่ให้บริการ 'ผล' เป็น tuple (stdoutdata, stderrdata)
นอกจากนี้คุณยังสามารถทำมันด้วยวิธีนี้:
>>> Ls = WrapCommand ('สั่ง ls -l | grep pdf | wc -l', เปลือก = True)
>>> Ls.start ()
>>> สิ่ง #Do
>>> Ls.join ()
>>> Ls.results [0]
'5 n'
คุณจะต้องระบุ 'เปลือก = True' เมื่อคำสั่งที่คุณต้องการที่จะดำเนินการคือการสร้างขึ้นจริงเป็นเปลือก เช่น: บน Windows ถ้าคุณใช้สร้างขึ้นในคำสั่งเช่น 'ผบ' หรือ 'สำเนา': http://docs.python.org/library/subprocess.html#subprocess.Popen
วัตถุประสงค์ของการทำมันในหัวข้อคือเมื่อคำสั่งดังกล่าวอาจใช้เวลาไม่กี่ชั่วโมงและที่คุณต้องการที่จะดำเนินการอื่น ๆ ในขณะเดียวกัน คุณสามารถตรวจสอบกระบวนการจะยังคงทำงานด้วย:
>>> Wc.is_alive ()
เท็จ
'ทรู' จะกลับมาถ้ายังคงทำงาน ที่จะยุติมันก่อนเวลาอันควร (คือมันถกเถียง) คุณมี 'ยุติ ()', 'ฆ่า ()' หรือ 'send_signal (สัญญาณ) ซึ่งเป็นวิธีการพูดของตัวเอง เมื่อคุณต้องการที่จะรอให้ด้ายท้ายที่สุดใช้ 'ร่วม () วิธีการ: http://docs.python.org/library/threading.html#threading.Thread.join
คุณต้องการที่จะเปิดตัวคำสั่งทุบตีต่อไปโดยไม่ต้องเกลียว:
ผู้ใช้ [@ localhost ~] $ ls-l | grep pdf | wc -l
5
นี่คือวิธีที่คุณสามารถทำมันได้
>>> Ls = WrapCommand ('LS-l')
>>> GrepPdf = WrapCommand ('grep pdf')
>>> ห้องสุขา = WrapCommand ('wc -l')
>>> สุขา (GrepPdf (แอลเอ))
'5 n'
หลีกเลี่ยงการทำเช่นนี้สำหรับกระบวนการที่ข้อมูลจำนวนมากเป็นประปาระหว่างแต่ละคำสั่ง
แทนที่จะทำมันด้วยวิธีนี้:
>>> Ls = WrapCommand ('สั่ง ls -l | grep pdf | wc -l', เปลือก = True)
>>> Ls ()
'5 n'
ชอบวิธีเกลียวแทนถ้าเรื่องนี้อาจต้องใช้เวลานานและที่คุณต้องการที่จะดำเนินการอื่น ๆ ในขณะเดียวกัน
คุณสามารถระบุเปลือกสำหรับการเรียกใช้คำสั่งอื่น:
>>> Ls = WrapCommand ('LS', เปลือก = True ปฏิบัติการ = 'C: /windows/System32/WindowsPowerShell/v1.0/powershell.exe')
>>> Ls พิมพ์ ()
& nbsp; ไดเรกทอรี C: Users อี python_tests
โหมด LastWriteTime ความยาวชื่อ
---- ------------- ------ ----
-a --- 27/01/2011 00:14 7006 commandwrapper.py
-a --- 27/01/2011 00:15 7048 commandwrapper.pyc
นอกจากนี้คุณยังสามารถใช้การจัดการบริบท (with_item): http://docs.python.org/reference/compound_stmts.html#grammar-token-with_item
ตัวอย่างเช่น:
>>> กับ WrapCommand ('LS-l') เป็นแอลเอส:
... กับ WrapCommand ('grep pdf') เป็น GrepPdf:
... กับ WrapCommand ('wc -l') เป็น wc:
... Wc.stdin = GrepPdf
... GrepPdf.stdin = แอลเอส
... Wc.start ()
... สิ่งที่ #Do
... Wc.join ()
...
>>> Wc.results
('5 n', '')
โดยคุณอาจจะต้องการที่จะมีกระบวนการย่อย Objet:
>>> LS = WrapCommand ('LS-l')
>>> lscmd = ls.makeCmd ()
>>>
วัตถุกลับ (lscmd ในตัวอย่างข้างต้น) เป็นวัตถุ subprocess.Popen มาตรฐาน
WrapOnceCommand เป็นเช่นเดียวกับ WrapCommand แต่แอตทริบิวต์ cmd ซึ่งเป็นวัตถุ subprocess.Popen จะถูกสร้างขึ้นและทุกครั้งดังนั้นการทำงาน Methode (หรือวัตถุ) เท่านั้นที่สามารถเรียกได้ว่าครั้งหนึ่ง เป้าหมายก็เพื่อเปิดคำสั่งในหัวข้อและให้มีคำสั่งนี้ได้อย่างง่ายดายเริ่ม / หยุดจากที่อื่น ๆ
มีอะไรใหม่ ในข่าวประชาสัมพันธ์ฉบับนี้.
- เปลี่ยนข้อมูลที่ติดต่อของผู้เขียน.
มีอะไรใหม่ ในรุ่น 0.4:
- คำเตือนที่นี่: http: //docs.python org / อ้างอิง / datamodel.html วัตถุ # .__ เด __
- และ becasue วัตถุทำลายที่ไม่ถูกลบออกโดยอัตโนมัติโดยการเก็บขยะตามที่อธิบายไว้ที่นี่:. http://docs.python.org/library/gc.html#gc.garbage ซึ่งอาจก่อให้เกิดการใช้งานหน่วยความจำเพิ่มขึ้น
ต้องการ
- หลาม
ความคิดเห็นที่ไม่พบ