0

我正在编写一个 Python 3 脚本,该脚本使用 https API 从 VPN 上的服务器获取随机分配的端口号。有了这个号码后,我想更改 emule 的 .ini 文件以使其使用该端口并启动 emule --easy。

接下来,我想确保 vuze 打开一个监听端口!= emule 正在使用的端口。Vuze 没有将其存储在易于编辑的 .ini 文件中,而是使用经过编码的 .config 文件。

如果有一种相对简单的方法可以在配置文件中设置此值,我想让 python 脚本选择一个随机端口号,更改 .config 文件并打开 vuze。

第二好的方法是启动 vuze 并打开该功能以分配一个随机监听端口,从 .config 文件中读取该端口,如果它与 emule 端口相同,则关闭并重新启动 vuze。

3 月 17 日:我在 [https://bitbucket.org/rsnitsch/py3bencode][1] 找到了 py3bencode,不过我是个菜鸟,但在运行 setup.py 之前我不确定将 4 个文件放在哪里。

3 月 30 日:更新最终代码:

def startmysoftware(portgiven):
# eMule

emuleinifile = os.environ['ProgramFiles']+'\\eMule\\config\\'+'preferences.ini'
# vvv beginning and ending quotes are to compensate for Microsoft kludge
emuleappfile = '"'+os.environ['ProgramFiles']+'\\eMule\\emule.exe'+'"'
print(emuleappfile)
# to use both Kademelia and eD2K, emule requires two different port numbers
# unfortunately, PIA's portforwarding servers only provide 1
eMuleNetworkIseD2K = True
parser = SafeConfigParser()
parser.read(emuleinifile)
if eMuleNetworkIseD2K:
    #set up for eD2K
    parser.set('eMule','Port',portgiven)
    parser.set('eMule','UDPPort','0')
    parser.set('eMule','NetworkKademlia','0')
    parser.set('eMule','NetworkED2K','1')
else:
    #set up for Kademelia
    parser.set('eMule','Port','1')
    parser.set('eMule','UDPPort',portgiven)
    parser.set('eMule','NetworkKademlia','1')
    parser.set('eMule','NetworkED2K','0')
with open(emuleinifile, 'w') as configfile:
    parser.write(configfile)
os.system(emuleappfile)
# Vuze
# verify vuze listening port != portgiven for emule and start vuze
vuzeconfigfile = os.environ['AppData']+'\\Azureus\\'+'azureus.config'
# vvv beginning and ending quotes are to compensate for Microsoft kludge
vuzeappfile = '"'+os.environ['ProgramFiles']+'\\Vuze\\azureus.exe'+'"'
vuzelistenport = portgiven
while vuzelistenport == portgiven:
    vuzelistenport = random.randint(49160, 65534)
# bdecode aszreus.config, set port and save
encodedconfig = open(vuzeconfigfile, 'rb').read()
mydecodedconfig=py3bencode.bdecode(encodedconfig)
mydecodedconfig['TCP.Listen.Port']=vuzelistenport
mydecodedconfig['UDP.Listen.Port']=vuzelistenport
mydecodedconfig['UDP.NonData.Listen.Port']=vuzelistenport
encodedconfig=py3bencode.bencode(mydecodedconfig)
configfile = open(vuzeconfigfile,'wb')
configfile.write(encodedconfig)
configfile.close()
os.system(vuzeappfile)
return True
4

1 回答 1

2

不需要通过. _ setup.py您可以简单地将py3bencode.py其放在与主脚本相同的目录中,然后像导入自己的 Python 模块一样导入它。

要检索 py3bencode,请按照以下说明操作:

  • 获取水银
  • 通过命令行克隆 py3bencode 的 Mercurial 存储库:hg clone https://bitbucket.org/rsnitsch/py3bencode

您现在可以简单地复制py3bencode.py到与脚本相同的文件夹中。

如果您坚持,您也可以setup.py再次尝试该过程:

  • 切换到 py3bencode 目录:cd py3bencode
  • setup.py install使用您的 Python 解释器运行,例如C:\Python33\python.exe setup.py install

一旦你有 py3bencode 供你使用,它应该很容易实现你想要的。只需解码 Vuze 的配置文件并让 Python 打印内容(提示:使用 Python 的pprint模块来获得可读的输出)。然后查找您要修改的值。

于 2013-03-24T16:32:22.473 回答