嘿,我想知道如何处理特定的错误代码.例如,[Errno 111] Connection refused
我想在套接字模块中捕获此特定错误并打印一些内容.
我正在使用python进行一些项目.我有一个客户端和一个服务器.服务器侦听连接,一旦收到连接,它就等待来自客户端的输入.这个想法是客户端可以连接到服务器并执行系统命令,如ls和cat.这是我的服务器代码:
import sys, os, socket
host = ''
port = 50105
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print("Server started on port: ", port)
s.listen(5)
print("Server listening\n")
conn, addr = s.accept()
print 'New connection from ', addr
while (1):
rc = conn.recv(5)
pipe = os.popen(rc)
rl = pipe.readlines()
file = conn.makefile('w', 0)
file.writelines(rl[:-1])
file.close()
conn.close()
Run Code Online (Sandbox Code Playgroud)
这是我的客户端代码:
import sys, socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'
port = input('Port: ')
s.connect((host, port))
cmd = raw_input('$ ')
s.send(cmd)
file = s.makefile('r', 0) …Run Code Online (Sandbox Code Playgroud) 我有点麻烦.我想创建一个连接到服务器并使用子进程执行命令的简单程序,然后将结果返回给客户端.它很简单,但我不能让它工作.现在这就是我所拥有的:客户:
import sys, socket, subprocess
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = sys.argv[1]
port = int(sys.argv[2])
socksize = 1024
conn.connect((host, port))
while True:
shell = raw_input("$ ")
conn.send(shell)
data = conn.recv(socksize)
#msglen = len(data)
output = data
iotype = subprocess.PIPE
cmd = ['/bin/sh', '-c', shell]
proc = subprocess.Popen(cmd, stdout=iotype).wait()
stdout,stderr = proc.communicate()
conn.send(stdout)
print(output)
if proc.returncode != 0:
print("Error")
Run Code Online (Sandbox Code Playgroud)
服务器:
import sys, socket, subprocess
host = ''
port = 50106
socksize = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print("Server started …Run Code Online (Sandbox Code Playgroud) 我需要在我的python脚本中添加一个函数来检查当前脚本是否已经在运行.如果是,那么它将退出,如果不是它继续运行脚本.我已经研究过这样做的方法,但我无法弄清楚如何做到这一点.
我在Python中使用套接字有点麻烦.每当有人连接它工作正常但如果他们断开连接服务器程序关闭.我希望服务器程序在客户端关闭后保持打开状态.我正在使用while循环来保持连接活动但是一旦客户端关闭连接,服务器就会关闭它的连接.
这是客户:
import socket, sys
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = sys.argv[1]
port = int(sys.argv[2])
conn.connect((host, port))
print("Connected to host " + sys.argv[1])
td = 1
while td == 1:
msg = raw_input('MSG: ')
Run Code Online (Sandbox Code Playgroud)
这是服务器:
import socket, sys
socket.setdefaulttimeout(150)
host = ''
port = 50005
socksize = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print("Server started on port: %s" % port)
s.listen(1)
print("Now listening...\n")
conn, addr = s.accept()
while True:
print 'New connection from %s:%d' % (addr[0], addr[1])
data = …Run Code Online (Sandbox Code Playgroud) 嘿我需要知道如何在不干扰当前脚本的情况下在Python中睡觉.我尝试过使用time.sleep()它会使整个脚本都处于睡眠状态.
比如说
import time
def func1():
func2()
print("Do stuff here")
def func2():
time.sleep(10)
print("Do more stuff here")
func1()
我希望它立即在这里打印Do stuff,然后等待10秒并在这里打印更多的东西. 我正在使用Python开发一些东西,我需要从%20(URL中的空格)中逃脱.例如:
"%20space%20in%20%d--" % ordnumRun Code Online (Sandbox Code Playgroud)
所以我需要使用%20作为URL,然后使用%d作为数字.但我得到这个错误:
TypeError: not enough arguments for format stringRun Code Online (Sandbox Code Playgroud)
我知道问题是什么我只是不知道如何从%20中逃脱并修复它.