萌新问个python的问题

Versirity 2019-09-26 05:51:06
import subprocess
import sys
import threading
import time

class mythread(threading.Thread):
def __init__(self,threadID):
threading.Thread.__init__(self)
self.threadID=threadID

def run(self):
t = time.localtime()
print("the xian start :%s the time:%s" % (self.threadID,time.asctime(t)))
# lock_thread.acquire()
if self.threadID=="01":
event()
else:
event2()
# t=time.localtime()
print("the xian end :%s the time:%s" % (self.threadID,time.asctime(t)))


def write(msg): # write负责将输入的命令转化为cmd能看懂的
temp_biaoshi.stdin.write((msg + "\r\n").encode('GBK'))
temp_biaoshi.stdin.flush()


def event():
# write("ping www.baidu.com")
# write("echo Hello!World 你好中国!你好世界!")
write("dir")
write("exit")
read_txt=temp_biaoshi.stdout.readline
while True:
line = read_txt()
if not line:
break
try:
tmp=line.decode("GBK")
sys.stdout.write(tmp)
except UnicodeDecodeError:
print("错误!")


def event2():
write("ping www.baidu.com")
write("echo Hello!World 你好中国!你好世界!")
# write("dir")
write("exit")
read_txt = temp_biaoshi.stdout.readline
while True:
line = read_txt()
if not line:
break
try:
tmp = line.decode("GBK")
sys.stdout.write(tmp)
except UnicodeDecodeError:
print("错误!")


if __name__=="__main__":
temp_biaoshi=subprocess.Popen("cmd.exe",shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
lock_thread=threading.Lock()
thread1=mythread("01")
thread2=mythread("02")
thread1.start()
thread1.join()
time.sleep(1)
thread2.start()
thread2.join()



报错这个 thread1成功启动了 但thread2却无法启动 这是为啥??适合subprocess机制有关吗??
引用
Exception in thread Thread-2:
Traceback (most recent call last):
File "G:\Program Files\Python\Python3\lib\threading.py", line 926, in _bootstrap_inner
self.run()
File "D:/biancheng_heji/python charm/practices-py/sw.py", line 19, in run
event2()
File "D:/biancheng_heji/python charm/practices-py/sw.py", line 47, in event2
write("ping www.baidu.com")
File "D:/biancheng_heji/python charm/practices-py/sw.py", line 26, in write
temp_biaoshi.stdin.flush()
OSError: [Errno 22] Invalid argument
...全文
89 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Versirity 2019-09-26
  • 打赏
  • 举报
回复
引用 5 楼 黄哥Python培训 的回复:
请按照下面的代码 去完善吧!


谢谢 看了下代码 是因为subprocess用到两个线程之中的缘故吗? 我以为创建个子进程,然后创建两个线程 按理来说这两个线程应该是共享内存 不过还是感谢 知道怎么改了
黄哥Python培训 2019-09-26
  • 打赏
  • 举报
回复
请按照下面的代码 去完善吧!
Versirity 2019-09-26
  • 打赏
  • 举报
回复
引用 3 楼 黄哥Python培训 的回复:
Window 下的代码,Mac下要好好修改一下,稍等。


好的 主要是多线程与subprocess混用出现了问题 找不到原因
黄哥Python培训 2019-09-26
  • 打赏
  • 举报
回复
Window 下的代码,Mac下要好好修改一下,稍等。
黄哥Python培训 2019-09-26
  • 打赏
  • 举报
回复
稍等,再调试一下代码。
黄哥Python培训 2019-09-26
  • 打赏
  • 举报
回复
没有看其它的问题,顺着报错信息去找问题, File "D:/biancheng_heji/python charm/practices-py/sw.py", line 26, in write temp_biaoshi.stdin.flush() 既然是它报错了,注释它,就没有报错。其它的错误没有再检查了。 纠正几个问题,类名要大写,加了锁。

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧