相关疑难解决方法(0)

Python - 运行 shell 命令,获取 stdout 和 stderr 作为变量,但对用户隐藏?

我想让我的 Python 脚本运行 Linux shell 命令并将输出存储在变量中,而不向用户显示命令的输出。我已经尝试过这个os.systemsubprocess.check_outputsubprocess.runsubprocess.Popen没有os.popen运气

我当前的方法正在运行os.system("ls -l &> /tmp/test_file"),因此命令 stdout 和 stderr 通过管道传输到/tmp/test_file,然后我让我的 Python 代码将文件读取到变量中,然后将其删除。

有没有更好的方法来做到这一点,以便我可以将命令输出直接发送到变量中,而不必创建和删除文件,但对用户隐藏它?

python subprocess capture python-3.x

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

从另一个脚本启动python脚本,并在subprocess参数中使用参数

要启动一个Python脚本(它是需要用于运行OLED显示器)从终端,我必须使用下面的bash命令:python demo_oled_v01.py --display ssd1351 --width 128 --height 128 --interface spi --gpio-data-command 20。之后的那些参数.py很重要,否则,脚本将使用默认设置运行,而在我的情况下,脚本将不会使用默认设置启动。因此,需要那些参数。

当我需要从另一个python脚本启动脚本(而不是在终端上使用bash命令)时,就会出现问题。从父脚本启动我的python脚本之一。我用过:

import subprocess # to use subprocess 

p = subprocess.Popen(['python', 'demo_oled_v01.py --display ssd1351 --width 128 --height 128 --interface spi --gpio-data-command 20'])
Run Code Online (Sandbox Code Playgroud)

在我的父脚本中,但出现错误说明:

python: can't open file 'demo_oled_v01.py --display ssd1351 --width 128 --height 128 --interface spi --gpio-data-command 20': [Errno 2] No such file or directory

我怀疑在--display ssd1351 --width 128 --height 128 --interface spi --gpio-data-command 20之后添加参数 .py可能会导致启动脚本困难。如前所述,这些参数对于我来说是必不可少的,包括在终端上使用bash命令启动时。如何使用带有必需参数的子进程来启动此脚本?

python bash subprocess

4
推荐指数
3
解决办法
4236
查看次数

用Django运行bash脚本

我是django的新手.当我在html中按下一个按钮时,我需要运行一个bash脚本,我需要使用Django Framework,因为我用它来构建我的web.如果有人能帮助我,我将不胜感激

编辑:我已添加了我的模板和我的观点以获得更多帮助.在'nuevaCancion'模板中,我使用了2个视图.

<body>
	
	{% block cabecera %}
	<br><br><br>
	<center>
	<h2> <kbd>Nueva Cancion</kbd> </h2>
	</center>
	{% endblock %}
	
	{% block contenido %}

		<br><br>
		<div class="container">
    		<form id='formulario' method='post' {% if formulario.is_multipart %} enctype="multipart/form-data" {% endif %} action=''>
				{% csrf_token %}
    			<center>
				<table>{{formulario}}</table>
        		<br><br>
        		<p><input type='submit' class="btn btn-success btn-lg" value='Añadir'/>
				 <a href="/ListadoCanciones/" type="input" class="btn btn-danger btn-lg">Cancelar</a></p>
				</center>
      	</form>
    	<br>
	</div>
	<center>
		<form action="" method="POST">
    		{% csrf_token %}
    		<button type="submit" class="btn btn-warning btn-lg">Call</button>
		</form>
	</center>
	{% endblock %}

</body>
Run Code Online (Sandbox Code Playgroud)

Views.py

def index(request): …
Run Code Online (Sandbox Code Playgroud)

html python django bash shell

4
推荐指数
1
解决办法
3755
查看次数

如何在子进程中避免shell = True

我有子进程命令来检查md5校验和为

subprocess.check_output('md5 Downloads/test.txt', stderr=subprocess.STDOUT, shell=True)
Run Code Online (Sandbox Code Playgroud)

它工作正常.但是我试着避免,shell=True 但是当我跑的时候

subprocess.check_output('md5 Downloads/test.txt', stderr=subprocess.STDOUT, shell=False)
Run Code Online (Sandbox Code Playgroud)

我收到错误 OSError: [Errno 2] No such file or directory

我可以运行上面的命令或解决方法,shell=False或者可以保留shell=True吗?

python shell subprocess popen

3
推荐指数
1
解决办法
1374
查看次数

如何避免os.system()在python中打印出返回值

我正在使用Python调用bash来执行另一个bash脚本:

begin = int(sys.argv[1])
result = os.system("/tesladata/isetools/cdISE.bash %s" %begin)
Run Code Online (Sandbox Code Playgroud)

打印后result,它不仅给我输出,还给出了返回状态(0这里).如果我只需要输出,我该怎么办?

而且,仅仅是为了好奇,有多少方法可以在Python中调用bash?我会很高兴,如果有人可以给我如何使用它们的一些参考,我只发现os.system()os.popen()至今.

python bash call

2
推荐指数
2
解决办法
8549
查看次数

无法使用python读取文件

我正在尝试使用 python 3.8.5 读取文件的内容,但输出为空,我不明白我做错了什么。

这是代码:

import subprocess
import os

filename = "ls.out"
ls_command = "ls -la"
file = open(filename, "w")
subprocess.Popen(ls_command, stdout=file, shell=True)
file.close()

# So far, all is ok. The file "ls.out" is correctly created and filled with the output of "ls -la" command"

file = open(filename, "r")
for line in file:
    print(line)
file.close()
Run Code Online (Sandbox Code Playgroud)

这个脚本的输出是空的,它不打印任何东西。看不到内容ls.out

这里有什么不正确的?

python file

2
推荐指数
1
解决办法
53
查看次数

从 python 执行列表中的 bash 命令

我得到了这个清单

commands = ['cd var','cd www','cd html','sudo rm -r folder']
Run Code Online (Sandbox Code Playgroud)

我试图将其中的所有元素作为 bash 脚本一一执行,但没有成功。我这里需要一个for循环吗?

如何实现?谢谢大家!!!!

python arrays tuples

1
推荐指数
1
解决办法
4162
查看次数

子进程命令编码

我目前正在将脚本从 Perl 迁移到 Python3 (3.6.5)。Is 在 Windows Server 2016 上运行。该脚本使用参数构建命令行,并使用subprocess.check_output. 参数选项之一称为-location:"my street"。该位置可以包含特殊字符,例如元音变音 (\xc3\xa4\xc3\xb6\xc3\x9f) 或 (\xc3\xa1\xc5\xa0)。

\n\n

当我运行 Perl 脚本时,特殊字符会正确传递到应用程序。当我运行 Python 脚本时,特殊字符将被应用程序中的问号替换。我认为被调用的应用程序需要一个 UTF-8 编码的参数字符串。

\n\n

Perl 脚本以 UTF-8 模式运行

\n\n
use UTF8;\nbinmode( STDOUT, ":utf-8" );\n
Run Code Online (Sandbox Code Playgroud)\n\n

Python脚本是用PyCharm创建的,UTF-8编码,脚本的第一行包含

\n\n
# -*- coding: utf-8 -*-\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试了多种方法将子进程参数的编码设置为 UTF-8,但它不起作用。我曾经procmon.exe比较过 Perl 和 Python 脚本之间的应用程序调用。我可以看到,在 procmon 中为 Python 子进程调用显示的命令行对我来说是可读的。工作 Perl 调用不。在 procmon 中查找 perl 脚本的位置字符串如下所示:

\n\n

-location:"HQ/\xc3\x83\xc2\xa4\xc3\x83\xc2\xb6\xc3\x83\xc2\xb6\xc3\x83\xc2\xb6Stra\xc3\x83\xc5\xb8e"

\n\n

Perl 代码如下所示:

\n\n
$command = "C:\\\\PROGRAM FILES\\\\Application\\\\bin\\\\cfg.exe"\n$operand = "-modify -location:123\xc3\xa1456\xc3\x9f99"\n$result  = …
Run Code Online (Sandbox Code Playgroud)

python perl python-3.x

1
推荐指数
1
解决办法
6895
查看次数

为什么这个命令在我的终端上工作但在我的代码中不起作用?

这不起作用,并说没有这样的文件或目录

current_conecctions = subprocess.Popen("netstat -p udp",shell = False, stdout=subprocess.PIPE).stdout.read()
Run Code Online (Sandbox Code Playgroud)

虽然netstat -p udp在终端中完美运行.

python shell netstat subprocess

0
推荐指数
1
解决办法
81
查看次数

b'由于 java.lang.classnotfoundation 错误导致无法找到或加载主类的错误'

我正在尝试使用 python 读取可执行 jar 文件。该 jar 文件没有任何 java 文件。它仅包含类和 JSON 文件。

所以我尝试的是

from subprocess import Popen,PIPE

jar_location = C:\\users\app\\my_file.jar"
inputs = C:\\users\\app\my_input.json"

my_data = Popen(["java", "-cp",jar_location,"SOMECLASS.class",inputs])
stdout,stderr = my_data.communicate()
print(stdout,stderr)
Run Code Online (Sandbox Code Playgroud)

我的预期输出是什么,它读取输入(inputs)并将其传递给给定的类方法(someclass.class),它应该为我返回一些响应。

但我得到的实际输出是找不到类文件错误。

类文件仅位于 jar 文件内

我尝试使用 Popen(["java",""-jar",jar_location,inputs]),但没有找到主要清单属性。我可以看到带有基本版本的清单文件。

有人可以帮我如何通过 python 读取这些类文件吗?我必须对 jar 文件内的多个类文件执行相同的操作

python java subprocess executable-jar

-1
推荐指数
1
解决办法
402
查看次数

标签 统计

python ×10

subprocess ×5

bash ×3

shell ×3

python-3.x ×2

arrays ×1

call ×1

capture ×1

django ×1

executable-jar ×1

file ×1

html ×1

java ×1

netstat ×1

perl ×1

popen ×1

tuples ×1