sanpo.py
เขียนไว้แบบนี้a = float(input())
print(a/11.)
import subprocess
subprocess.run(['python','sanpo.py'])
Traceback (most recent call last):
File "sanpo.py", line 1, in <module>
a = float(input())
EOFError: EOF when reading a line
import subprocess
subprocess.run(['python','sanpo.py'],input='2',text=True)
0.18181818181818182
a = int(input())
b = int(input())
print('%d/%d = %s'%(a,b,a/b))
subprocess.run(['python','sanpo.py'],input='2\n3',text=True)
2/3 = 0.6666666666666666
sanpo.py
ซึ่งมีการใช้ input เพื่อรับค่า ๒ ตัวa = int(input())
b = int(input())
print('%d×%d = %s'%(a,b,a*b))
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,text=True)
po.stdin.write('11\n') # ป้อนค่าตัวแรก
po.stdin.flush() # สิ้นสุดการป้อนตัวแรก
po.stdin.write('12\n') # ป้อนค่าตัวที่สอง
po.stdin.flush() # สิ้นสุดการป้อนตัวที่สอง
po.wait() # รอจนสิ้นสุดโปรแกรม
11×12 = 132
open('ชื่อไฟล์','w')
)
นั่นคือจะใช้เมธอด .write() เพื่อเขียนค่าลงไปได้with subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,text=True) as po:
po.stdin.write('11\n')
po.stdin.flush()
po.stdin.write('12\n')
po.stdin.flush()
sanpo.py
เป็นa = int(input())
print('2^%d = %s'%(a,2**a))
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,text=True)
po.stdin.write('13\n')
po.stdin.flush()
print(po.stdout.read()) # ได้ 2^13 = 8192
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,stdout=open('xxx.txt','w'),text=True)
po.stdin.write('15\n')
po.stdin.flush()
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,stderr=subprocess.PIPE,text=True)
po.stdin.write('x\n')
po.stdin.flush()
print(po.stderr.read())
Traceback (most recent call last):
File "sanpo.py", line 1, in
a = int(input())
ValueError: invalid literal for int() with base 10: 'x'
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,text=True)
po.stdin.write('x\n')
po.stdin.flush()
print(po.stdout.read())
sanpo.py
ซึ่งจะรับค่าตัวเลขมาแล้วเอามาคูณ 2a = int(input())
print(a*2)
po1 = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,text=True)
po1.stdin.write('7\n')
po1.stdin.flush()
po2 = subprocess.Popen(['python','sanpo.py'],stdin=po1.stdout,stdout=subprocess.PIPE,text=True)
print(po2.stdout.read()) # ได้ 28
sanpo.py
เป็นแบบนี้a = int(input())
b = int(input())
print('%d^%d = %s'%(a,b,a**b))
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,text=True)
po.stdin.write('5\n')
po.communicate('4')
5^4 = 625
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,text=True)
po.stdin.write('5\n')
res = po.communicate('4')
print(res) # ได้ ('5^4 = 625\n', None)
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,stderr=subprocess.PIPE,text=True)
po.stdin.write('\n')
res = po.communicate('x')
print(res) # ได้ (None, 'Traceback (most recent call last):\n File "sanpo.py", line 1, in \n a = int(input())\nValueError: invalid literal for int() with base 10: \'\'\n')
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,text=True)
po.stdin.write('\n')
res = po.communicate('x')
print(res) # ได้ ('Traceback (most recent call last):\n File "sanpo.py", line 1, in \n a = int(input())\nValueError: invalid literal for int() with base 10: \'\'\n', None)
sanpo.py
เป็นโปรแกรมที่ใช้ฟังก์ชัน time.sleep เผื่อถ่วงเวลาตามที่ระบุไปimport time
a = float(input())
time.sleep(a)
print('ผ่านไปแล้ว %f วินาที'%a)
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,text=True)
res,_ = po.communicate('2',timeout=2.2)
print(res) # ได้ ผ่านไปแล้ว 2.000000 วินาที
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,text=True)
res,_ = po.communicate('2.5',timeout=2.2)
print(res) # ได้ TimeoutExpired: Command '['python', 'sanpo.py']' timed out after 2.2 seconds
sanpo.py
ให้กินเวลาตามค่าที่ใส่เข้าไป แบบนี้import time
a = int(input())
time.sleep(a)
print('เวลาล่วงไป %s วินาที'%a)
import subprocess,time
po3 = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,text=True)
po3.stdin.write('3\n')
po3.stdin.flush()
po2 = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,text=True)
po2.stdin.write('2\n')
po2.stdin.flush()
po1 = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,text=True)
po1.stdin.write('1\n')
po1.stdin.flush()
time.sleep(4) # รอไปสัก ๔ วินาที ให้ทำเสร็จทั้งหมดก่อน
เวลาล่วงไป 1 วินาที
เวลาล่วงไป 2 วินาที
เวลาล่วงไป 3 วินาที
tt = [2,6,5,1]
for t in tt:
po = subprocess.Popen(['python','sanpo.py'],stdin=subprocess.PIPE,text=True)
po.stdin.write('%d\n'%t)
po.stdin.flush()
time.sleep(max(tt)+1) # รอจนทำเสร็จหมด
เวลาล่วงไป 1 วินาที
เวลาล่วงไป 2 วินาที
เวลาล่วงไป 5 วินาที
เวลาล่วงไป 6 วินาที
sanpo.py
ให้มีการใช้เวลา ๒ วินาทีดังนี้import time
time.sleep(2)
import subprocess,time
po = subprocess.Popen(['python','sanpo.py'])
time.sleep(1) # รอสัก 1 วินาที
print(po.poll()) # ได้ None
time.sleep(3) # รอต่ออีก 3 วินาที
print(po.poll()) # ได้ 0
po = subprocess.Popen(['python','sanpo.py'])
t0 = time.time()
while(po.poll()==None):
print(f'ผ่านไปแล้ว {time.time()-t0} วินาที')
time.sleep(0.3)
ผ่านไปแล้ว 4.696846008300781e-05 วินาที
ผ่านไปแล้ว 0.30647993087768555 วินาที
ผ่านไปแล้ว 0.6083638668060303 วินาที
ผ่านไปแล้ว 0.912254810333252 วินาที
ผ่านไปแล้ว 1.215419054031372 วินาที
ผ่านไปแล้ว 1.5203897953033447 วินาที
ผ่านไปแล้ว 1.8238389492034912 วินาที
ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ