Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pyngrok时,如何防止python程序加载?_Python_Pyngrok - Fatal编程技术网

使用pyngrok时,如何防止python程序加载?

使用pyngrok时,如何防止python程序加载?,python,pyngrok,Python,Pyngrok,我的脚本中有以下函数 import os, re from pyngrok import ngrok def server(): os.system('kill -9 $(pgrep ngrok)') ngrok.connect(443, "tcp") while True: ngrok_tunnels = ngrok.get_tunnels() url = n

我的脚本中有以下函数

import os, re

from pyngrok import ngrok

def server():
        os.system('kill -9 $(pgrep ngrok)')
        ngrok.connect(443, "tcp")
        while True:
                ngrok_tunnels = ngrok.get_tunnels()
                url = ngrok_tunnels[0].public_url
                if re.match("tcp://[0-9]*.tcp.ngrok.io:[0-9]*", url) is not None:
                        print "your url is : " + url
                        break
这负责生成ngrok tcp链接,它可以正常工作,但会像下图所示那样卡住


我怎样才能防止它被起诉?只需打印链接,他们告诉我关于
monitor\u thread
模式的错误,但我不知道如何在我的函数中配置它,非常感谢。脚本“卡住”的原因是
pyngrok
启动
ngrok
时有一个线程来监视日志,在处理完所有线程之前,Python进程无法退出。您可以停止监视器线程,如图所示,或者,如果您不使用它,可以首先阻止它启动:


import os, re

from pyngrok import ngrok
from pyngrok.conf import PyngrokConfig

def server():
    os.system('kill -9 $(pgrep ngrok)')
    ngrok_tunnel = ngrok.connect(443, "tcp", pyngrok_config=PyngrokConfig(monitor_thread=False))
    print("your url is : " + ngrok_tunnel.public_url)

但是,这仍然不能满足您的需要。如果您这样做,是的,您将返回到控制台,但是
ngrok
进程也将停止,因为此时它是Python的子进程。要使通道保持打开状态,您需要让流程保持运行。

打印语句正在打印,因此不清楚“卡住”是什么意思-如果卡住了,我们将看不到此输出。是否有更多在这之后要执行的代码没有被共享?目前,我们没有足够的信息来回答这个问题。由于单词卡住,我的意思是它一直在执行脚本,直到我给它控制z或控制c来停止进程,我希望它只打印tcp链接并直接将我发送到“root@kali:~/新“在我的项目中,我以以下方式运行ngrok:“./ngrok tcp port>/dev/null 2>&1&”,这样执行输出就不会显示,但我想修改它并使用它的pyngrok模块,我如何将进程发送到/dev/null,使它不会停止运行?所以我得到了url grep my localhost:4040/status,听起来你有其他一些非Python应用程序或脚本,你正试图与Python(特别是
pyngrok
)接口,以获取
ngrok
的公共url,对吗?因为听起来你的另一个应用程序不是Python,但是你可以访问Bash命令,为什么不做一些类似于
ngrok tcp 443--log stdout
的事情,然后
grep
记录“tunnel started”和公共URL。看看这是我以前的代码:如果它有效,但是我想停止使用ngrok文件,使用pyngrok对我来说更实用,但我希望它的工作方式与此代码类似,为了让进程重定向到/dev/null以避免输出,为了让进程继续运行,如果不使用pyngrok,您会怎么做?我想我不太了解您的用例,不知道您为什么要这样做,但基本上您定义的
server()
方法将在某个文件中,
server.py
,您可以调用
python server.py&
让它在后台执行,就像您使用
ngrok
命令一样。类似地,您可以将其输出到任何您想要的地方,包括
/dev/null
。如果此代码确实位于.py文件中,并且我将其发送给另一个脚本调用,那么我希望打印URL,用户决定是否使用ngrok链接,但我仍然希望显示tcp链接,我想这样做,但使用pyngrok,你能支持我怎么做吗?