cmd_server.py
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:cmd_server.py
# time:2021/03/15
import subprocess
import socket
# family type
sk = socket.socket() #两个参数,family=AF_INET代表ipv4,type=SOCK_STREAM代表tcp,proto=0
print(sk)
address=('127.0.0.1',8000) #ip和端口
sk.bind(address) #绑定ip和端口
sk.listen(3) #3代表tcp/udp连接数
print('waiting......')
while True:
conn, addr = sk.accept() # 阻塞,accept接收连接内容
print(addr)
while True:
try:
data = conn.recv(1024)
except Exception:
break
if not data: break
print('......', str(data, 'utf8'))
obj = subprocess.Popen(str(data,'utf8'),shell=True,stdout=subprocess.PIPE)
cmd_result = obj.stdout.read() #bytes类型
print(cmd_result)
result_len = bytes(str(len(cmd_result)),'utf8')
print('>>>>>>',result_len)
conn.sendall(result_len)
import time
time.sleep(1)
conn.sendall(cmd_result)
sk.close()
/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/cmd_server.py
<socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 0)>
waiting......
cmd_client.py
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:cmd_client.py
# time:2021/03/15
import socket
sk = socket.socket()
print(sk)
address = ('127.0.0.1',8000)
sk.connect(address) #连接127.0.0.1:8000端口
while True:
inp = input('>>>')
if inp == 'exit':
break
sk.send(bytes(inp,'utf8'))
result_len = int(str(sk.recv(1024),'utf8')) #拿到数据大小
print(result_len)
data = bytes() #空bytes,类似data=0
while len(data) != result_len:
recv = sk.recv(1024)
data += recv
print(str(data,'utf8'))
sk.close() #关闭连接
/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/cmd_client.py
<socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 0)>
>>>ls
1242
3menu_latest.py
3menu_new.py
3menu.py
对齐.py
格式化输出.py
日志记录
深浅拷贝.py
小重山
小重山2
assignment.py
built-in-funcation.py
calculator.py
cal.py
client
client.py
closure.py
cmd_client.py
cmd_server.py
code template.py
configparser_module.py
continue.py
decrator.py
dictionary.py
encapsulation.py
encode_py3.py
example.ini
exception_handling.py
field.py
file_operation2.py
file_operation.py
funcation_recursion.py
function_ parameter.py
function.py
function_return.py
function_scope.py
generator.py
hashlib_module.py
hello
i.cfg
inherit.py
__init__.py
iterator.py
jingdong_passwd
JSON_loads.py
json_test.py
JSON_text
JSON_text2
list_builder.py
list_lesson.py
log
logging_module.py
login.py
login_while.py
member_qualifier_character.py
menu.py
module_project
__name__.py
object_oriented.py
os_module.py
output.xml
PICKLE_load.py
PICKLE_test.py
PICKLE_text
polymorphic.py
__pycache__
random_module.py
reflex.py
re_module.py
s1.py
s2.py
serve.py
set.py
SHELVE_test
SHELVE_test.py
shopping_car_login.py
shopping_cart.py
shopping.py
Singleton_mode.py
smoke
special_members.py
String.py
sys_module.py
test
test.log
test.py
test.xml
three_level_menu
time_module.py
tuple.py
weixin_passwd
xml_test
XML_test.py
xmltest.xml
>>>ip addr show
867
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 44:8a:5b:f1:bd:c5 brd ff:ff:ff:ff:ff:ff
3: wlp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether d8:fc:93:0f:85:93 brd ff:ff:ff:ff:ff:ff
inet 192.168.254.20/27 brd 192.168.254.31 scope global dynamic noprefixroute wlp5s0
valid_lft 4134sec preferred_lft 4134sec
inet6 fe80::65c8:65dd:a44d:f28c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
>>>hostname
23
smoke-GS70-2PC-Stealth
>>>
cmd_server.py
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:cmd_server.py
# time:2021/03/15
import subprocess #subprocess通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息
import socket
sk = socket.socket()
print(sk)
address = ('127.0.0.1',8000)
sk.bind(address)
sk.listen(3)
print('waiting....')
while True:
conn, addr = sk.accept()
print(addr)
while True:
try:
data = conn.recv(1024)
except Exception as e:
break
if not data:break
print(str(data, 'utf8'))
obj = subprocess.Popen(str(data,'utf8'),shell=True,stdout=subprocess.PIPE) #将一个进程的执行输出作为另一个进程的输入,data shell命令,shell=True参数会让subprocess.call接受字符串类型的变量作为命令,stdout 标准输入,subprocess.PIPE 管道输出,subprocess.PIPE:在创建Popen对象时,可以初始化为stdin, stdout或stderr的参数,表示与子进程通信的标准输入流,标准输出流以及标准错误。
cmd_result = obj.stdout.read() #bytes类型
result_len = bytes(str(len(cmd_result)),'utf8') #int无法直接转换成bytes,需要先转换成str,拿出命令输出大小
print(result_len)
conn.sendall(result_len) #粘包现象,会偶尔出现result_len和comd_result同时发送导致错误
conn.recv(1024) #使用recv做隔断
conn.sendall(cmd_result)
sk.close()
/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/cmd_server.py
<socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 0)>
waiting....
cmd_client.py
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:cmd_client.py
# time:2021/03/15
import socket
sk = socket.socket()
print(sk)
address = ('127.0.0.1',8000)
sk.connect(address)
while True:
inp = input('>>>')
if inp == 'exit': #不能发送空,发空会阻塞卡住。
break
sk.send(bytes(inp,'utf8'))
result_len = int(str(sk.recv(1024),'utf8')) #拿到数据大小
sk.sendall(bytes('ok','utf8')) #隔断
print(result_len)
data = bytes()
while len(data) != result_len:
recv = sk.recv(1024)
data += recv
print(str(data,'utf8'))
sk.close()
/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/cmd_client.py
<socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 0)>
>>>dir
1511
3menu_latest.py function_\ parameter.py PICKLE_text
3menu_new.py function.py polymorphic.py
3menu.py function_return.py __pycache__
对齐.py function_scope.py random_module.py
格式化输出.py generator.py reflex.py
日志记录 hashlib_module.py re_module.py
深浅拷贝.py hello s1.py
小重山 i.cfg s2.py
小重山2 inherit.py serve.py
assignment.py __init__.py set.py
built-in-funcation.py iterator.py SHELVE_test
calculator.py jingdong_passwd SHELVE_test.py
cal.py JSON_loads.py shopping_car_login.py
client json_test.py shopping_cart.py
client.py JSON_text shopping.py
closure.py JSON_text2 Singleton_mode.py
cmd_client.py list_builder.py smoke
cmd_server.py list_lesson.py special_members.py
code\ template.py log String.py
configparser_module.py logging_module.py sys_module.py
continue.py login.py test
decrator.py login_while.py test.log
dictionary.py member_qualifier_character.py test.py
encapsulation.py menu.py test.xml
encode_py3.py module_project three_level_menu
example.ini __name__.py time_module.py
exception_handling.py object_oriented.py tuple.py
field.py os_module.py weixin_passwd
file_operation2.py output.xml xml_test
file_operation.py PICKLE_load.py XML_test.py
funcation_recursion.py PICKLE_test.py xmltest.xml
>>>ls
1242
3menu_latest.py
3menu_new.py
3menu.py
对齐.py
格式化输出.py
日志记录
深浅拷贝.py
小重山
小重山2
assignment.py
built-in-funcation.py
calculator.py
cal.py
client
client.py
closure.py
cmd_client.py
cmd_server.py
code template.py
configparser_module.py
continue.py
decrator.py
dictionary.py
encapsulation.py
encode_py3.py
example.ini
exception_handling.py
field.py
file_operation2.py
file_operation.py
funcation_recursion.py
function_ parameter.py
function.py
function_return.py
function_scope.py
generator.py
hashlib_module.py
hello
i.cfg
inherit.py
__init__.py
iterator.py
jingdong_passwd
JSON_loads.py
json_test.py
JSON_text
JSON_text2
list_builder.py
list_lesson.py
log
logging_module.py
login.py
login_while.py
member_qualifier_character.py
menu.py
module_project
__name__.py
object_oriented.py
os_module.py
output.xml
PICKLE_load.py
PICKLE_test.py
PICKLE_text
polymorphic.py
__pycache__
random_module.py
reflex.py
re_module.py
s1.py
s2.py
serve.py
set.py
SHELVE_test
SHELVE_test.py
shopping_car_login.py
shopping_cart.py
shopping.py
Singleton_mode.py
smoke
special_members.py
String.py
sys_module.py
test
test.log
test.py
test.xml
three_level_menu
time_module.py
tuple.py
weixin_passwd
xml_test
XML_test.py
xmltest.xml
>>>ip addr show
867
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 44:8a:5b:f1:bd:c5 brd ff:ff:ff:ff:ff:ff
3: wlp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether d8:fc:93:0f:85:93 brd ff:ff:ff:ff:ff:ff
inet 192.168.254.20/27 brd 192.168.254.31 scope global dynamic noprefixroute wlp5s0
valid_lft 3799sec preferred_lft 3799sec
inet6 fe80::65c8:65dd:a44d:f28c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
>>>
浙公网安备 33010602011771号