我正在尝试从刚被解开的对象访问数据,并将其与]一起使用>
os.popen()
击中错误
Traceback (most recent call last): File "tmpclient4.py", line 46, in <module> stream = os.popen('%t.cmd', '%t.arg') File "/usr/lib/python3.8/os.py", line 978, in popen raise ValueError("invalid mode %r" % mode) ValueError: invalid mode '%t.arg'
或错误:
ValueError: invalid mode 'htop' #my object value
使用中
stream = os.popen('%t.cmd', '%t.arg')
或
stream = os.popen(t.cmd, t.arg)
代码:
import socket import pickle import os HEADERSIZE = 10 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('192.168.42.14', 666)) class Zeroquery: # Initializer / Instance Attributes def __init__(self, cmd, arg): self.cmd = cmd self.arg = arg while True: full_msg = b'' new_msg = True while True: msg = s.recv(16) if new_msg: print("new msg len:",msg[:HEADERSIZE]) msglen = int(msg[:HEADERSIZE]) new_msg = False print(f"full message length: {msglen}") full_msg += msg print(len(full_msg)) if len(full_msg)-HEADERSIZE == msglen: print("full msg recvd") t = pickle.loads(full_msg[HEADERSIZE:]) print(t.cmd, t.arg) if t.cmd: stream = os.popen(t.cmd, t.arg) output = stream.read() print(output) new_msg = True full_msg = b""
如何使用对象数据使用os.popen?
我正在尝试从刚被解开的对象访问数据,并将其与os.popen()配合使用,从而导致错误回溯(最近一次调用是最近的):文件“ tmpclient4.py”,第[..行。 。
cmd = f"{t.cmd} {t.arg}"
如果cmd
和arg
是字符串,则可以这样做
cmd = " ".join([t.cmd, t.arg])
或
cmd = t.cmd + " " + t.arg
现在您可以将其用作第一个参数
os.popen(cmd)
编辑:
最终,您可以在__str__
中创建方法Zeroquery
然后您可以使用
class Zeroquery: # Initializer / Instance Attributes def __init__(self, cmd, arg): self.cmd = cmd self.arg = arg def __str__(self): return self.cmd + " " + self.arg
str(t)
os.popen( str(t) )
BTW:
[当Zeroquery
具有__str__
时,您可以打印它(即使没有str()
)和
print( t )
print()
将使用此__str__
转换为字符串。