当前位置:首页 » 编程语言 » pythonremote

pythonremote

发布时间: 2023-05-18 22:40:53

‘壹’ Appium使用python进行自动化测试问题,webdriver.Remote报编码错误

这游友个是编码问题,没有用过Appium,给个建议:

检查你代码里的点号、神瞎槐冒号、句号和制表符等,不要出现半角符号神袭。

‘贰’ 防止 python deamon 进程被干掉

最近需要在一台 remote 的 gpu 机器上跑 training 的脚本,terminal 不可能一直开着,所以肯定都是要以 daemon 方式来谈弯首跑。

众所周知,最简单的 daemon 运行的方式就是在命令后加 &,再配合将输出重定向到一个 log 文件,这样就可以实现即以 daemon 跑,也能随时查看 output 和error 相关的信息。比如

不过最近几天,我发现每次到公司查看昨晚上的任务情况,都发现进程在我下班后不久就被干掉,output.log 中也没有任何的错误信息。实在是相当诡异。

google 了一番,没什么有建设性的意见,一开始以为是不是 & 方式的 daemon 天生有缺陷,还研究半天怎么用 python fork 出 daemon process。但越试越感觉,可能这个不是主要原因,在玩了几次 python-daemon 之后,还是决定回到源头尝试解决。

其中有一个回答提到了可能因为脚本占用内存过大导致被系统 kill 掉(OOM),这个时候脚本本身是不会输出错误的。于是就去 /var/log/system.log 里边儿翻 OOM,结果 OOM 没翻到到翻到了一个 "Received SIGRTMIN+24 from PID 27041 (kill)." , 继续 google 了一下发现。这是系统闹凯进程 systemd 发出的信号,(systemd 可以理解为调度 daemon process 的进程)。

为什么 systemd 没事儿会来干我的脚本呢? 因为 systemd 默认会在一个 user detach 的时候,干掉这个 user 启动的所有 process,不管你是不是 daemon。所以当我的本地电脑休眠超过一定时间时,远程的机器自动 logout user, 然后触发 systemd 干掉了我的脚本,即便我的脚本有 & 加持。

知道问题的原因那就简单了,简单 google 一下就能知道, 我们只含数需要修改 /etc/systemd/logind.conf 中,将 KillUserProcesses=no 反 comment 即可。代表让 systemd 不要干掉 user process。

‘叁’ 如何利用Python嗅探数据包

一提到Python获取数据包的方式,相信很多Python爱好者会利用linux的libpcap软件包或利用Windows下的WinPcap可移植版的方式进行抓取数据包,然后再利用dpkt软件包进行协议分析,我们这里想换一个角度去思考:1.Python版本的pcap存储内存数据过小,也就是说缓存不够,在高并发下容易发生丢包现象,其实C版本的也同样存在这样的问题,只不过Python版本的缓存实在是过低,让人很郁闷。2.dpkt协议分析并非必须,如果你对RFC791和RFC793等协议熟悉的话,完全可以使用struct.unpack的方式进行分析。如果你平常习惯使用tcpmp抓取数据包的话,完全可以使用它来代替pcap软件包,只不过我们需要利用tcpmp将抓取的数据以pcap格式进行保存,说道这里大家一定会想到Wireshark工具,具体命令如下:tcpmpdst10.13.202.116andtcpdstport80-s0-ieth1-w../pcap/tcpmp.pcap-C1k-W5我们首先需要对pcap文件格式有所了解,具体信息大家可以参考其他资料文档,我这里只说其重要的结构体组成,如下:sturctpcap_file_header{DWORDmagic;WORDversion_major;WORDversion_minor;DWORDthiszone;DWORDsigfigs;DWORDsnaplen;DWORDlinktype;}structpcap_pkthdr{structtimevalts;DWORDcaplen;DWORDlen;}structtimeval{DWORDGMTtime;DWORDmicroTime;}这里需要说明的一点是,因为在Python的世界里一切都是对象,所以往往Python在处理数据包的时候感觉让人比较麻烦。Python提供了几个libpcapbind,这里有一个最简单的。在windows平台上,你需要先安装winpcap,如果你已经安装了Ethereal非常好用。一个规范的抓包过程:importpcapimportdpktpc=pcap.pcap()#注,参数可为网卡名,如eth0pc.setfilter('tcpport80')#设置监听过滤器forptime,pdatainpc:#ptime为收到时间,pdata为收到数据printptime,pdata#对抓到的以太网V2数据包(rawpacket)进行解包:p=dpkt.ethernet.Ethernet(pdata)ifp.data.__class__.__name__=='IP':ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))ifp.data.data.__class__.__name__=='TCP':ifdata.dport==80:printp.data.data.data一些显示参数nrecv,ndrop,nifdrop=pc.stats()返回的元组中,第一个参数为接收到的数据包,第二个参数为被核心丢弃的数据包。至于对于如何监控tcpmp生成的pcap文件数据,大家可以通过pyinotify软件包来实现,如下:classPacker(pyinotify.ProcessEvent):def__init__(self,proct):self.proct=proctself.process=Nonedefprocess_IN_CREATE(self,event):logger.debug("createfile:%sinqueue"%self.process_IF_START_THREAD(event))defprocess_IN_MODIFY(self,event):self.process_IF_START_THREAD(event)logger.debug("modifyfile:%sinqueue"%self.process_IF_START_THREAD(event))defprocess_IN_DELETE(self,event):filename=os.path.join(event.path,event.name)logger.debug("deletefile:%s"%filename)defprocess_IF_START_THREAD(self,event):filename=os.path.join(event.path,event.name)iffilename!=self.process:self.process=filenameself.proct.put(filename)ifself.proct.qsize()>1:try:logger.debug("createconsumerproct.qsize:%s"%self.proct.qsize())consumer=Consumer(self.proct)consumer.start()exceptException,errmsg:logger.error("createconsumerfailed:%s"%errmsg)returnfilenameclassFactory(object):def__init__(self,proct):self.proct=proctself.manager=pyinotify.WatchManager()self.mask=pyinotify.IN_CREATE|pyinotify.IN_DELETE|pyinotify.IN_MODIFYdefwork(self):try:try:notifier=pyinotify.ThreadedNotifier(self.manager,Packer(self.proct))notifier.start()self.manager.add_watch("../pcap",self.mask,rec=True)notifier.join()exceptException,errmsg:logger.error("createnotifierfailed:%s"%errmsg)exceptKeyboardInterrupt,errmsg:logger.error("factoryhasbeenterminated:%s"%errmsg)在获得要分析的pcap文件数据之后,就要对其分析了,只要你足够了解pcap文件格式就可以了,对于我们来讲只需要获得TCP数据段的数据即可,如下:classWriter(threading.Thread):def__init__(self,proct,stack):threading.Thread.__init__(self)self.proct=proctself.stack=stackself.pcap_pkthdr={}defrun(self):whileTrue:filename=self.proct.get()try:f=open(filename,"rb")readlines=f.read()f.close()offset=24whilelen(readlines)>offset:self.pcap_pkthdr["len"]=readlines[offset+12:offset+16]try:length=struct.unpack("I",self.pcap_pkthdr["len"])[0]self.stack.put(readlines[offset+16:offset+16+length])offset+=length+16exceptException,errmsg:logger.error("unpackpcap_pkthdrfailed:%s"%errmsg)exceptIOError,errmsg:logger.error("openfilefailed:%s"%errmsg)在获得TCP数据段的数据包之后,问题就简单多了,根据大家的具体需求就可以进行相应的分析了,我这里是想分析其HTTP协议数据,同样也借助了dpkt软件包进行分析,如下:defworker(memcache,packet,local_address,remote_address):try:p=dpkt.ethernet.Ethernet(packet)ifp.data.__class__.__name__=="IP":srcip="%d.%d.%d.%d"%tuple(map(ord,list(p.data.src)))dstip="%d.%d.%d.%d"%tuple(map(ord,list(p.data.dst)))ifp.data.data.__class__.__name__=="TCP":tcpacket=p.data.dataiftcpacket.dport==80anddstip==local_address:srcport=tcpacket.sportkey=srcip+":"+str(srcport)iftcpacket.data:ifnotmemcache.has_key(key):memcache[key]={}ifnotmemcache[key].has_key("response"):memcache[key]["response"]=Noneifmemcache[key].has_key("data"):memcache[key]["data"]+=tcpacket.dataelse:memcache[key]["data"]=tcpacket.dataelse:ifmemcache.has_key(key):memcache[key]["response"]=dpkt.http.Request(memcache[key]["data"])try:stackless.tasklet(connection)(memcache[key]["response"],local_address,remote_address)stackless.run()exceptException,errmsg:logger.error("connectremoteremote_addressfailed:%s",errmsg)logger.debug("oldheaders(nonecontent-length):%s",memcache[key]["response"])memcache.pop(key)exceptException,errmsg:logger.error("dpkt.ethernet.Ethernetfailedinworker:%s",errmsg)如果大家只是想单纯的获取IP地址、端口、流量信息,那么问题就更简单了,这里只是抛砖引玉。另外再提供一段代码供参考:importpcap,dpkt,structimportbinasciidefmain():a=pcap.pcap()a.setfilter('udpportrange4000-4050')try:fori,pdataina:p=dpkt.ethernet.Ethernet(pdata)src='%d.%d.%d.%d'%tuple(map(ord,list(p.data.src)))dst='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))sport=p.data.data.sportdport=p.data.data.dport =int(binascii.hexlify(p.data.data.data[7:11]),16)print' :%d,From:%s:%d,To:%s:%d'%( ,src,sport,dst,dport)exceptException,e:print'%s'%en=raw_input()if__name__=='__main__':main()

‘肆’ python为何多线程报错,单线程没问题

挖,你的csdn悬赏一百分,亏了亏了。

网页链接

上面那个博主文章中的答案应该就能解决,归根结底,这是com组件在初始化时对待单线程和多线程存在区别所致(python默认只初始化单线程的COM组件)。

方便不小心点进来的朋友直接粘贴答案如下:

查了一下,在线程所在文件中加入 import pythoncom

每个进程执行时需要加上一句:pythoncom.CoInitialize()就可以解决。

‘伍’ Python在driver = webdriver.Remote('地址', desired_caps)就报错,是什么原因

java没有正确安装

‘陆’ python使用Flask框架获取用户IP地址的方法

主要介绍了python使用Flask框架获取用户IP地址的方法,实例分析了Python使用Flask框架remote_addr获取IP的`技巧,非常具有实用价值,需要的朋友可以参考下。

下面的代码包含了html页面和python代码,非常详细,如果你正使用Flask,也可以学习一下最基本的Flask使用方法。

python代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

from flask import Flask, render_template, request

# Initialize the Flask application

app = Flask(__name__)

# Default route, print user's IP

@app.route('/')

def index():

ip = request.remote_addr

return render_template('index.html', user_ip=ip)

if __name__ == '__main__':

app.run(

host="0.0.0.0",

port=int("80")

)

html代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

<!DOCTYPE html>

<html lang="en">

<head>

<link href="bootstrap/3.0.0/css/bootstrap.min.css"

rel="stylesheet">

</head>

<body>

<p class="container">

<p class="header">

<h3 class="text-muted">How To Get The IP Address Of The User</h3>

</p>

<hr/>

<p>

You IP address is: <strong>{{user_ip}}</strong>

<p class="header">

<h3 class="text-muted">Code to retrieve the IP</h3>

</p>

<hr/>

<pre>

from flask import Flask, render_template, request

# Initialize the Flask application

app = Flask(__name__)

# Default route, print user's IP

@app.route('/')

def index():

ip = request.remote_addr

return render_template('index.html', user_ip=ip)

</pre>

</p>

</p>

</body>

</html>

希望本文所述对大家的Python程序设计有所帮助。

‘柒’ python 实现 在已打开的页面操作

1、要重写Remote类,防止session重建,如下:

class ReuseChrome(Remote):

    def __init__(self, command_executor, session_id):

        self.r_session_id= session_id

        Remote.__init__(self, command_executor=command_executor, desired_capabilities={})

    def start_session(self, capabilities, browser_profile=None):

        if not isinstance(capabilities, dict):

            raise InvalidArgumentException("Capabilities must be a dictionary")

        if browser_profile:

            if "moz:firefoxOptions" in capabilities:

     冲团桥           capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded

else:

                capabilities.update({'firefox_profile': browser_profile.encoded})

       散猛 self.capabilities= options.Options().to_capabilities()

        self.session_id= self.r_session_id

self.w3c= False

2、或袭访问已打开页面方式:

dr= ReuseChrome(command_executor=old_curl, session_id=sessionid)

其中old_curl需在原来打开的页面上获取:

old_curl=dr.command_executor._url    #一定要用这个方法,获取当前地址是行不通的!

sessionid=dr.session_id

‘捌’ Python高性能分布式执行框架-Ray

这是别人说的,咱也不敢说,咱也不敢问 ! 了解大致的逻辑就好.你只需要知道他超级牛逼,超级方便

安装就是简单的 pip install ray , 需要提醒的就是ray现在只有linux编配卜梁译版本, windows就别想着用了,为了这,我硬生生把开发环境从windows切到了linux.

首先来看一下最简单的Ray程序是如何编写的。

在Ray里,通过Python注解@ray.remote定义remote函数。使用此注解声明的函数都会自带一个默认的方法remote,通过此方法发起的函数调用都是以提交分布式任务的方式异步执行的,函数的返培运回值是一个对象id,弊悉使用ray.get内置操作可以同步获取该id对应的对象

参考:
高性能分布式执行框架——Ray
取代 Python 多进程!伯克利开源分布式框架 Ray
官方文档
基于python的高性能实时并行机器学习框架之Ray介绍

‘玖’ python里的rc是什么意思

在Python中,rc通常是指配置文件中的运行时配置(runtime configuration)选项。rc在Linux和Unix系统中是很磨雀常见的一种命名规范,表示运行时的配置文件。
例如,在Python中,一些库或应用程序可能提供一个名为.pylintrc或者pyproject.toml的配置文件,其中包含有关该库或应用程序如何运行的选项和参数。在这些配置知枣文件中,rc就代表运行时配置。
另外,有时候rc也可以是指遥控器(remote control)的缩写,这通常是在处理机器人控制、无线通信搭游拆、自动化等方面的项目中使用的。

热点内容
androidurl判断 发布:2025-05-20 13:50:11 浏览:258
共享文件夹没有启动服务器服务 发布:2025-05-20 13:43:38 浏览:803
天龙八部游戏怎么切换服务器 发布:2025-05-20 13:42:36 浏览:631
亚马逊免费主机是什么配置 发布:2025-05-20 13:40:10 浏览:696
存储类型默认分配 发布:2025-05-20 13:32:26 浏览:662
qq信息加密 发布:2025-05-20 13:31:32 浏览:341
文件夹嗅探器foldersniffer 发布:2025-05-20 12:33:36 浏览:912
编译装入 发布:2025-05-20 12:32:48 浏览:563
万胜压缩机价格 发布:2025-05-20 12:20:00 浏览:987
判断云服务器是否诚实的存放数据 发布:2025-05-20 12:11:07 浏览:378