Python:对脚本运行命令行应用程序。在文件中发送参数

时间:2009-10-05 14:28:15

标签: python

我想尝试在我的python应用程序中使用命令行脚本。任务如下,我的数据库存储脚本的一些初始数据和 我需要以下列方式执行命令行应用程序:

$ application -parameter1 -file1

此处file1是一个包含我的初始数据的文件,而parameter1是一个无关的参数。

我现在看到的工作流程如下:

initial_data = get_initial_data_from_db()
file = open('temp.txt', 'w+')
file.write(initial_data)
file.save()
os.popen4("application -parameter1 -file temp.txt")

我想知道是否可以执行此脚本(称为application)而无需将带有初始数据的文件写入硬盘?例如。有没有办法直接将文件内容发送到命令?

5 个答案:

答案 0 :(得分:1)

您可以使用子流程模块

类似的东西:

import subprocess
bufsize =1024
initial_data = get_initial_data_from_db()
p = subprocess.Popen("application -parameter1", shell=True, bufsize=bufsize,
          stdin=subprocess.PIPE,   close_fds=True)

p.stdin.write(initial_data)
print p.communicate()

!如果您的应用程序可以从stdin读取

使用Python作为应用程序进行测试(在Eclipse中)/在Oleg Tarasenko的评论之后:

import subprocess

initial_data = """
import sys
print sys.path
"""

for test in [1,2,3] :
    p = subprocess.Popen("C:/python26/python", shell=True, bufsize=512,
          stdin=subprocess.PIPE,  stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)

    p.stdin.write(initial_data)
    print p.communicate()

输出:

("['', 'C:\\\\dev\\\\ide\\\\eclipse\\\\plugins\\\\org.python.pydev_1.5.0.1251989166\\\\PySrc\\\\pydev_sitecustomize', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\libs', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jacob.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jiffie.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jaxen-1.1.1.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\swt.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\mysql-connector-java-3.0.17-ga-bin.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\qpslib.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\ifxjdbc.jar', 'C:\\\\server\\\\jboss\\\\client\\\\jbossall-client.jar', 'C:\\\\usr\\\\local\\\\machine', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol\\\\config', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\oknos\\\\tickcardimp\\\\bin', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\common\\\\jar\\\\shared.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\libs', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jacob.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jiffie.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jaxen-1.1.1.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\swt.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\mysql-connector-java-3.0.17-ga-bin.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\qpslib.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\ifxjdbc.jar', 'C:\\\\server\\\\jboss\\\\client\\\\jbossall-client.jar', 'C:\\\\usr\\\\local\\\\machine', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol\\\\config', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\oknos\\\\tickcardimp\\\\bin', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\common\\\\jar\\\\shared.jar', 'C:\\\\jython\\\\jython2.5.0\\\\Lib', 'C:\\\\jython\\\\jython2.5.0\\\\Lib\\\\site-packages', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\rt.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\jsse.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\jce.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\charsets.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\dnsns.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\localedata.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\sunjce_provider.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\sunpkcs11.jar', 'C:\\\\WINDOWS\\\\system32\\\\python26.zip', 'C:\\\\python26\\\\DLLs', 'C:\\\\python26\\\\lib', 'C:\\\\python26\\\\lib\\\\plat-win', 'C:\\\\python26\\\\lib\\\\lib-tk', 'C:\\\\python26']\r\n", "'import site' failed; use -v for traceback\r\n")
("['', 'C:\\\\dev\\\\ide\\\\eclipse\\\\plugins\\\\org.python.pydev_1.5.0.1251989166\\\\PySrc\\\\pydev_sitecustomize', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\libs', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jacob.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jiffie.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jaxen-1.1.1.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\swt.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\mysql-connector-java-3.0.17-ga-bin.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\qpslib.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\ifxjdbc.jar', 'C:\\\\server\\\\jboss\\\\client\\\\jbossall-client.jar', 'C:\\\\usr\\\\local\\\\machine', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol\\\\config', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\oknos\\\\tickcardimp\\\\bin', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\common\\\\jar\\\\shared.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\libs', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jacob.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jiffie.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jaxen-1.1.1.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\swt.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\mysql-connector-java-3.0.17-ga-bin.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\qpslib.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\ifxjdbc.jar', 'C:\\\\server\\\\jboss\\\\client\\\\jbossall-client.jar', 'C:\\\\usr\\\\local\\\\machine', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol\\\\config', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\oknos\\\\tickcardimp\\\\bin', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\common\\\\jar\\\\shared.jar', 'C:\\\\jython\\\\jython2.5.0\\\\Lib', 'C:\\\\jython\\\\jython2.5.0\\\\Lib\\\\site-packages', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\rt.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\jsse.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\jce.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\charsets.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\dnsns.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\localedata.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\sunjce_provider.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\sunpkcs11.jar', 'C:\\\\WINDOWS\\\\system32\\\\python26.zip', 'C:\\\\python26\\\\DLLs', 'C:\\\\python26\\\\lib', 'C:\\\\python26\\\\lib\\\\plat-win', 'C:\\\\python26\\\\lib\\\\lib-tk', 'C:\\\\python26']\r\n", "'import site' failed; use -v for traceback\r\n")
("['', 'C:\\\\dev\\\\ide\\\\eclipse\\\\plugins\\\\org.python.pydev_1.5.0.1251989166\\\\PySrc\\\\pydev_sitecustomize', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\libs', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jacob.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jiffie.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jaxen-1.1.1.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\swt.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\mysql-connector-java-3.0.17-ga-bin.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\qpslib.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\ifxjdbc.jar', 'C:\\\\server\\\\jboss\\\\client\\\\jbossall-client.jar', 'C:\\\\usr\\\\local\\\\machine', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol\\\\config', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\oknos\\\\tickcardimp\\\\bin', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\common\\\\jar\\\\shared.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\libs', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jacob.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jiffie.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\jaxen-1.1.1.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\swt.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\script_jy\\\\jars\\\\mysql-connector-java-3.0.17-ga-bin.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\qpslib.jar', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\nlibs\\\\ifxjdbc.jar', 'C:\\\\server\\\\jboss\\\\client\\\\jbossall-client.jar', 'C:\\\\usr\\\\local\\\\machine', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol\\\\config', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src\\\\build\\\\components\\\\jobcontrol', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\event\\\\src', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\oknos\\\\tickcardimp\\\\bin', 'C:\\\\dev\\\\ws\\\\central\\\\head\\\\common\\\\jar\\\\shared.jar', 'C:\\\\jython\\\\jython2.5.0\\\\Lib', 'C:\\\\jython\\\\jython2.5.0\\\\Lib\\\\site-packages', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\rt.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\jsse.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\jce.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\charsets.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\dnsns.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\localedata.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\sunjce_provider.jar', 'C:\\\\dev\\\\java\\\\jdk1.5.0_17\\\\jre\\\\lib\\\\ext\\\\sunpkcs11.jar', 'C:\\\\WINDOWS\\\\system32\\\\python26.zip', 'C:\\\\python26\\\\DLLs', 'C:\\\\python26\\\\lib', 'C:\\\\python26\\\\lib\\\\plat-win', 'C:\\\\python26\\\\lib\\\\lib-tk', 'C:\\\\python26']\r\n", "'import site' failed; use -v for traceback\r\n")

答案 1 :(得分:0)

这完全取决于您正在调用的命令行程序的功能。如果它要求你给它一个文件名作为参数,你就必须这样做。但是,如果你给它一个“ - ”的文件名,它将从stdin读取。有些程序以这种方式工作。您需要阅读该程序的文档,以了解您可以使用的选项。

答案 2 :(得分:0)

Bryan Oakley是正确的,其中很多都取决于被调用应用程序的功能。但如果它不能直接采用标准输入,可能还有另一种方式。如果您使用的是类Unix系统,则可以使用named pipe替换临时文件。 Wikipedia声称Windows具有类似的功能,但我并不熟悉它。这可能需要从另一个Python线程中启动应用程序。

答案 3 :(得分:0)

另外一个想法是,你可以使用内置的temp file that Python has built in。我不是非常熟悉Python或这个功能,但我想分享这个想法。

您仍然会以同样的方式编写文件并执行客户端程序。但是,通过这种方式,Python可以为您管理清理,这可能足以解决您的问题,无需担心更复杂的实现。

答案 4 :(得分:0)

如果您使用的是Linux,则可以尝试传递/ dev / stdin作为与使用“ - ”相同的文件,但支持不知道“ - ”的程序