相关疑难解决方法(0)

如何从Python执行程序?由于路径中的空格,os.system失败

我有一个需要执行外部程序的Python脚本,但由于某种原因失败了.

如果我有以下脚本:

import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();
Run Code Online (Sandbox Code Playgroud)

然后它失败并出现以下错误:

'C:\ Temp\a'不被识别为内部或外部命令,可操作程序或批处理文件.

如果我用引号来逃避程序:

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe"');
raw_input();
Run Code Online (Sandbox Code Playgroud)

然后它工作.但是,如果我添加一个参数,它会再次停止工作:

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe" "C:\\test.txt"');
raw_input();
Run Code Online (Sandbox Code Playgroud)

执行程序并等待程序完成的正确方法是什么?我不需要从中读取输出,因为它是一个可视化程序,可以完成工作然后退出,但我需要等待它完成.

另请注意,将程序移动到非间隔路径也不是一种选择.


这也不起作用:

import os;
os.system("'C:\\Temp\\a b c\\Notepad.exe'");
raw_input();
Run Code Online (Sandbox Code Playgroud)

注意交换的单/双引号.

在此处有或没有记事本参数,它会失败并显示错误消息

文件名,目录名或卷标语法不正确.

python shellexecute

264
推荐指数
7
解决办法
61万
查看次数

从python中执行命令行程序

可能重复:
在Python中调用外部命令

我正在构建一个Web应用程序,它将操纵(填充,混合,合并等)声音文件,我发现sox完全符合我的要求.Sox是一个linux命令行程序,让我感到有点不舒服的是让python web应用程序在我的服务器上基于每个请求启动新的sox进程.

例:

import os
os.system('sox input.wav -b 24 output.aiff rate -v -L -b 90 48k')
Run Code Online (Sandbox Code Playgroud)

整个设置对我来说似乎有点不稳定.

所以我的问题是,在python(或任何脚本语言)Web应用程序中运行命令行程序的最佳实践是什么?

为了绕过整个请求响应周期,消息队列将是一件要实现的事情.但还有其他方法可以让这些东西更优雅吗?

python command-line

260
推荐指数
2
解决办法
47万
查看次数

如何在Python中启动后台进程?

我正在尝试将shell脚本移植到更易读的python版本.原始shell脚本在后台使用"&"启动多个进程(实用程序,监视器等).如何在python中实现相同的效果?我希望这些进程不会在python脚本完成时死掉.我确信它与守护进程的概念有某种关系,但我无法轻易找到如何做到这一点.

python daemon process

259
推荐指数
7
解决办法
37万
查看次数

子进程中'shell = True'的实际含义

我用subprocess模块调用不同的进程.但是,我有一个问题.

在以下代码中:

callProcess = subprocess.Popen(['ls', '-l'], shell=True)
Run Code Online (Sandbox Code Playgroud)

callProcess = subprocess.Popen(['ls', '-l']) # without shell
Run Code Online (Sandbox Code Playgroud)

两者都有效.阅读文档后,我开始知道这shell=True意味着通过shell执行代码.这意味着在缺席的情况下,该过程将直接启动.

那么我应该更喜欢我的情况 - 我需要运行一个进程并获得其输出.从shell内部或外部调用它有什么好处.

python subprocess

236
推荐指数
5
解决办法
14万
查看次数

如何使用python执行curl命令

我想在python中执行curl命令.

通常,我只需要在终端输入命令并按回车键.但是,我不知道它在python中是如何工作的.

该命令如下所示:

curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere
Run Code Online (Sandbox Code Playgroud)

有一个request.json文件要发送以获得响应.

我经常搜索并感到困惑.我试着写一段代码,虽然我无法完全理解.它没用.

import pycurl
import StringIO

response = StringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere')
c.setopt(c.WRITEFUNCTION, response.write)
c.setopt(c.HTTPHEADER, ['Content-Type: application/json','Accept-Charset: UTF-8'])
c.setopt(c.POSTFIELDS, '@request.json')
c.perform()
c.close()
print response.getvalue()
response.close()
Run Code Online (Sandbox Code Playgroud)

错误信息是'Parse Error'.任何人都可以告诉我如何修复它?或者如何正确地从服务器获得响应?

python curl

135
推荐指数
8
解决办法
38万
查看次数

如何从Python异步运行外部命令?

我需要从Python脚本异步运行shell命令.通过这个我的意思是我希望我的Python脚本在外部命令关闭时继续运行并执行它需要做的任何事情.

我看过这篇文章:

在Python中调用外部命令

然后我os.system()去做了一些测试,看起来我会&在命令结束时使用它来完成工作,这样我就不必等待它返回了.我想知道的是,这是否是实现这一目标的正确方法?我试过commands.call()但它对我不起作用,因为它阻止了外部命令.

如果使用os.system()这个是可取的,或者我应该尝试其他路线,请告诉我.

python subprocess asynchronous scheduler

99
推荐指数
8
解决办法
12万
查看次数

在Python中运行外部程序(可执行文件)?

我刚刚开始研究Python,我一直在尝试从Python运行外部可执行文件.

我有一个用Fortran编写的程序的可执行文件.假设可执行文件的名称是flow.exe.我的可执行文件位于C:\Documents and Settings\flow_model.我尝试了os.system和popen命令,但到目前为止我无法使其工作.以下代码似乎打开命令窗口,但它不会执行模型.

# Import system modules
import sys, string, os, arcgisscripting
os.system("C:/Documents and Settings/flow_model/flow.exe")
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

python executable

84
推荐指数
7
解决办法
27万
查看次数

从Python中的脚本捕获stdout

假设有一个脚本做这样的事情:

# module writer.py
import sys

def write():
    sys.stdout.write("foobar")
Run Code Online (Sandbox Code Playgroud)

现在假设我想捕获write函数的输出并将其存储在变量中以供进一步处理.天真的解决方案是:

# module mymodule.py
from writer import write

out = write()
print out.upper()
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我想出了另一个解决方案并且它有效,但是请告诉我是否有更好的方法来解决问题.谢谢

import sys
from cStringIO import StringIO

# setup the environment
backup = sys.stdout

# ####
sys.stdout = StringIO()     # capture output
write()
out = sys.stdout.getvalue() # release output
# ####

sys.stdout.close()  # close the stream 
sys.stdout = backup # restore original stdout

print out.upper()   # post processing
Run Code Online (Sandbox Code Playgroud)

python stdout sys

79
推荐指数
8
解决办法
8万
查看次数

如何从python程序中使用youtube-dl

我想访问shell命令的结果:

youtube-dl -g "www.youtube.com..."
Run Code Online (Sandbox Code Playgroud)

将其输出打印direct url到文件; 从python程序中:

import youtube-dl
fromurl="www.youtube.com ...."
geturl=youtube-dl.magiclyextracturlfromurl(fromurl)
Run Code Online (Sandbox Code Playgroud)

那可能吗 ?我试图了解源的机制,但迷路了:youtube_dl/__init__.py,youtube_dl/youtube_DL.py,info_extractors...

python youtube-dl

63
推荐指数
2
解决办法
8万
查看次数

在Python脚本中执行curl命令

我试图在python脚本中执行curl命令.

如果我在终端中这样做,它看起来像这样:

curl -X POST -d  '{"nw_src": "10.0.0.1/32", "nw_dst": "10.0.0.2/32", "nw_proto": "ICMP", "actions": "ALLOW", "priority": "10"}' http://localhost:8080/firewall/rules/0000000000000001
Run Code Online (Sandbox Code Playgroud)

我已经看过要使用的建议pycurl,但我无法弄清楚如何将它应用到我的.

我试过用:

subprocess.call([
    'curl',
    '-X',
    'POST',
    '-d',
    flow_x,
    'http://localhost:8080/firewall/rules/0000000000000001'
])
Run Code Online (Sandbox Code Playgroud)

它有效,但还有更好的方法吗?

python curl pycurl python-2.7

53
推荐指数
6
解决办法
15万
查看次数