从其他 Python 脚本调用我的聊天脚本

Posted

技术标签:

【中文标题】从其他 Python 脚本调用我的聊天脚本【英文标题】:Call my Chat script from other Python script 【发布时间】:2015-04-06 16:41:12 【问题描述】:

这个问题与 python 脚本调用中的其他 python 类似,但没有一个对我有用。

我有一个使用 Python XMPP 发送聊天消息的聊天脚本。语法如下:

python chat.py -c "recipient@example.com" -u "sender@example.com" -p "secret" -m "message"

脚本:

#!/usr/bin/python
import sys
import argparse
import xmpp

def main(argv):
    parser = argparse.ArgumentParser()
    parser.add_argument('-c', dest='contact', required=True)
    parser.add_argument('-u', dest='username', required=True)
    parser.add_argument('-p', dest='password', required=True)
    parser.add_argument('-m', dest='message', required=False, default='')
    args = parser.parse_args(argv)

    if (args.message == '') and not sys.stdin.isatty():
        for line in sys.stdin:
            args.message = args.message + line

    jid = xmpp.protocol.JID(args.username)
    jabber = xmpp.Client(jid.getDomain(), debug=[])
    jabber.connect(server=(jid.getDomain(), 5222) )
    jabber.auth(jid.getNode(), args.password)

    jabber.send(xmpp.Message(args.contact, args.message.strip()))

if __name__ == "__main__":
    main(sys.argv[1:])

如您所见,它需要 4 个参数。

现在我有另一个正在监听传感器的 python 脚本。我试图让它在检测到传感器读数时发送聊天消息,所以在 listen.py 中我正在这样做:

...
import chat
...
chat.main('-c "chatto@server.com" -u "chatfrom@server.com" -p "password" -m "Yo Yo Yo Wassup"')
....

我也尝试过 subprocess.call 但可能没有正确的语法。两个python脚本都在同一个目录中。因此,对于那些寻找特定问题的人来说,如何在提供四个必需参数的同时从 listen.py 中调用 chat.py?

【问题讨论】:

【参考方案1】:

parse_args() 需要一个字符串列表。对于简单的,你可以只在空格上split(),但在你的情况下,你有一个内部空格的复杂参数,所以这是行不通的。

不要在字符串中包含引号。这些用于在从 shell 定义时允许参数具有内部空格,但它们不会发送到 argv。

chat.main(['-c', 'chatto@server.com', '-u', 'chatfrom@server.com', '-p', 'password', '-m', 'Yo Yo Yo Wassup'])

在此处查看更多信息:https://docs.python.org/2/library/argparse.html#beyond-sys-argv

【讨论】:

太棒了!非常感谢。

以上是关于从其他 Python 脚本调用我的聊天脚本的主要内容,如果未能解决你的问题,请参考以下文章

在其他位置从 cgi-bin 运行 python 脚本

python调用其他脚本

shell脚本怎么调用其他shell脚本

3种python调用其他脚本的方法,你还知道其他的方法吗?

从php.in windows调用python脚本

Mysql:如何从其他 sql 脚本文件中调用 sql 脚本文件?