Python 语法--Popen参数

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

我有一个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.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")