我有一个在命令行中启动的python机器人,并要求我登录以开始工作。
要跳过此步骤,我添加了一个管道,将登录信息直接插入命令中,如下所示:
printf "login" | python_module-py
现在,我想安排机器人的启动,而不必自己启动,并避免机器人始终需要我的电脑。
因此,我购买了Debian VPS并尝试创建systemd服务。我将命令放在外壳中。这是我的服务:(假设我的脚本在/ home / user中,并且我拥有rwx的所有权限)
[Unit]
Description=Description
After=network.target
[Service]
Type=simple
User=user
Group=group
WorkingDirectory=/home/user
ExecStart=./script.sh
[Install]
WantedBy=multi-user.target
我尝试启动它,但由于此错误而失败:
TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'
我几乎可以肯定这是因为登录名没有通过管道传递,我想知道为什么。
请先请我说英语。
[也经过测试]
使用/bin/sh -c
将命令保留在服务中,还会产生相同的错误:
ExecStart=/bin/sh -c '/usr/bin/printf "login" | /usr/bin/python3.7 -m python_module'
答案 0 :(得分:0)
该管道将无法直接在例如ExecStart
语句,相反,您应该使用类似ExecStart=/bin/sh -c 'printf "login" | python_module-py'
的方式让/bin/sh
处理管道。
通过设置StandardInput
,您还应该能够将文件作为标准输入传递给服务。
答案 1 :(得分:0)
我解决了这个问题。
就我而言,我必须使用xargs命令来确保确实粘贴了管道中的文本。
printf "login" | xargs python_module-py