Python 语法--Popen参数
我有一个PHP脚本,它需要一个命令行参数。我需要从python脚本内部调用此脚本Python 语法--Popen参数,python,subprocess,crontab,popen,Python,Subprocess,Crontab,Popen,我有一个PHP脚本,它需要一个命令行参数。我需要从python脚本内部调用此脚本 Popen('php simplepush.php "Here's the argument"', shell=True, cwd="/home/ubuntu/web/firestopapp.com/app") ^这很有效。但是,我想在Python脚本中传递一个变量,而不是“这里是参数”。但当我尝试时: var1 = "yes" Popen(['php', 'simplepush.p
Popen('php simplepush.php "Here's the argument"', shell=True, cwd="/home/ubuntu/web/firestopapp.com/app")
^这很有效。但是,我想在Python脚本中传递一个变量,而不是“这里是参数”。但当我尝试时:
var1 = "yes"
Popen(['php', 'simplepush.php', var1], shell=True, cwd="/home/ubuntu/web/firestopapp.com/app")
它不再起作用了。这是通过crontab运行的,这使我不得不包含cwd参数
我非常感谢任何帮助,这似乎是一个相当简单的语法问题
根据Eric的建议:
回溯(最近一次呼叫最后一次):
文件“/home/ubuntu/web/mywebsite.com/app/email_parse.py”,第25行,在
Popen('php simplepush.php“这里是参数“”,shell=False,cwd=“/home/ubuntu/web/mywebsite.com/app”)
文件“/usr/lib/python2.7/subprocess.py”,第711行,在__
错误读取,错误写入)
文件“/usr/lib/python2.7/subprocess.py”,第1308行,在执行子进程中
引发子对象异常
OSError:[Errno 2]没有这样的文件或目录
Sihrc的解决方案让我明白了以下几点,所以它不是一个完整的解决方案。
/bin/sh:1:无法打开my2ndemail@gmail.com:无此类文件
下面是代码的其余部分
#!/usr/bin/python
import email, getpass, imaplib, os, subprocess
from subprocess import Popen
detach_dir = '.'
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login("myemail@gmail.com","mypassword")
m.select('mailbox')
resp, items = m.search(None, "(UNSEEN)")
message = ""
items = items[0].split()
for emailid in items:
resp, data = m.fetch(emailid, "(RFC822)")
email_body = data[0][1]
mail = email.message_from_string(email_body)
message += "["+mail["From"]+"] :" + mail["Subject"] + "\n"
for part in mail.walk():
if part.get_content_type() == 'text/plain':
message += part.get_payload()
else:
continue
Popen('php simplepush.php ' + str(eval('message')), shell=True, cwd="/home/ubuntu/web/firestopapp.com/app")
绕道!回避这个问题是我的专长
var1 = "yes"
Popen('php simplepush.php ' + '"' + str(eval('var1')) + '"', shell=True, cwd="/home/ubuntu/web/firestopapp.com/app")
@EricUrban在更新的问题中从cron的MTA响应中进行了回溯。@user2476581请使用回溯更新您的问题,这太难理解为comment@MattDMo编辑,抱歉造成混乱!为什么不使用Popen('php simplepush.php'+str(eval('var1')),shell=..)@sihrc?我相信这已经解决了这个问题。谢谢你的帮助!因此,当我定义var1=“yes”时,实际上这是可行的,但当我在问题中编辑了一些类似于其余代码的内容时,它就会中断。是的,我在问题中编辑了它:
/bin/sh:1:无法打开my2ndemail@gmail.com:无此类文件
my2ndemail@gmail.com是我在上面执行的消息+=操作的一部分。如果我只是在Popen之前打印消息
,整个字符串都会正确打印。对不起,我粘贴了不同的版本。使用带引号的eval仍然会出现我上面给出的错误,它试图打开字符串而不是将其用作参数。此时,我建议将消息写入外部文件并用php读取。
#!/usr/bin/python
import email, getpass, imaplib, os, subprocess
import shlex
from subprocess import Popen
detach_dir = '.'
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login("myemail@gmail.com","mypassword")
m.select('mailbox')
resp, items = m.search(None, "(UNSEEN)")
message = ""
items = items[0].split()
for emailid in items:
resp, data = m.fetch(emailid, "(RFC822)")
email_body = data[0][1]
mail = email.message_from_string(email_body)
message += "["+mail["From"]+"] :" + mail["Subject"] + "\n"
for part in mail.walk():
if part.get_content_type() == 'text/plain':
message += part.get_payload()
else:
continue
for pdir in os.getenv('PATH'):
if os.access("{}/{}".format(pdir, 'php'), os.X_OK):
phppath = "{}/{}".format(pdir, 'php')
break
cmd = '{} simplepush.php "{}"'.format(phppath, message)
Popen(shlex.split(cmd),
cwd="/home/ubuntu/web/firestopapp.com/app")