我有一系列脚本,它们被另一个脚本以明确的顺序调用run.py。
里面run.py我有以下内容:
script1 = str(sys.path[0]) + "\\script1.py"
subprocess.call(["Python", script1])
Run Code Online (Sandbox Code Playgroud)
依此类推 3 个脚本。如果我想以这种格式向脚本 1 传递两个参数,例如脚本执行时要在脚本中使用的显式运行设置等参数,我该怎么做?我有一种感觉,它会依赖于 script1 中的 sys.argv,但是无论我传递什么索引位置,都会出现参数超出范围的错误。
谢谢!
我将如何在 python 中执行以下子进程命令?
$ ps aux|grep python
>>> subprocess.check_output(['ps', 'aux', 'grep', 'python']) ?
Run Code Online (Sandbox Code Playgroud) 你好,我无法让我的脚本运行,它的目的是通过 HTTP 实时显示我的屏幕,但它出现了一个我似乎无法修复的错误。
#!/bin/python
import subprocess
import threading
try:
subprocess.Popen("rm out.mpg")
except OSError:
pass
subprocess.Popen("ffmpeg -f x11grab -framerate 60 -video_size 1366x768 -i :0.0 out.mpg")
subprocess.Popen("python -m SimpleHTTPServer 8000 out.mpg")
Run Code Online (Sandbox Code Playgroud)
错误是
Traceback (most recent call last):
File "Streaming.py", line 11, in <module>
subprocess.Popen("ffmpeg -f x11grab -framerate 60 -video_size 1366x768 -i :0.0 out.mpg")
File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud) 我有一个小问题。我在 ubuntu 16.04 机器上,在 python 脚本中我想启动一个子进程,该子进程应在用户的主目录中启动。我尝试过:
subprocess.Popen('echo "Test"', cwd="~", shell=True,universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, executable="/bin/bash")
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到以下错误:
proc = subprocess.Popen('echo "test"', cwd="~", shell=True,universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, executable="/bin/bash")
File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: '~'
Run Code Online (Sandbox Code Playgroud)
我不确定我做错了什么,因为当您在 cd 命令中输入 ~ 时,它会将您切换到主目录。我希望有人能找到解决方案,解释为什么它不能以这种方式工作,以及在主目录中启动它的正确方法是什么。
我正在编写一个测试脚本,如果确认该路径存在并且是一个目录,则该脚本应该从当前目录 cd 到新目录
serial_number = input("Enter serial number: ")
directory = "/etc/bin/foo"
if os.path.exists(directory) and os.path.isdir(directory):
#cd into directory?
subprocess.call(['cd ..' + directory])
Run Code Online (Sandbox Code Playgroud)
我的困境是我不知道如何正确地将变量传递到子进程命令中,或者是否应该使用 call 或 Popen。当我尝试上面的代码时,它返回一个错误,指出No such file or directory "cd ../etc/bin/". 我需要从当前目录返回一个目录,这样我就可以输入/etc并读取其中的一些文件。有什么建议吗?
在新的 asyncio 框架中,如何编写subprocess.check_output的嵌入式异步等效项来捕获流程执行的完整输出?
此任务涉及两个 python 脚本。
我当前的任务要求我在 GCP 实例上的 29 个可用区域中的每一个中运行一个很长的过程(每个过程大约需要一两天,这是第一个 python 脚本)。为了尽快完成任务,我尝试在一次性分拆 29 个虚拟机后同时运行每个实例中的每个进程。
由于通过 SSH 手动运行第一个脚本到每个实例非常麻烦,因此我编写了一个python 脚本(第二个脚本),通过 SSH 连接到每个区域的虚拟机并运行我上面提到的第一个脚本。
在不同区域运行第一个脚本的第二个脚本的问题在于,它不会开始在第二个区域的虚拟机中运行第一个脚本,直到它在第一个区域的虚拟机中完成运行,而我需要第二个脚本来运行第一个脚本在每个区域中编写脚本,而无需等待第一个脚本启动的进程结束。
我在第二个脚本中使用 subprocess()在每个虚拟机中运行第一个脚本。
以下代码是第二个脚本:
for zone, instance in zipped_zone_instance:
command = "gcloud compute ssh --zone " + zone + " " + instance + " --project cloud-000000 --command"
command_lst = command.split(" ")
command_lst.append("python3 /home/first_script.py")
subprocess.run(command_lst)
Run Code Online (Sandbox Code Playgroud)
我需要 subprocess.run(command_lst) …
python terminal subprocess google-compute-engine google-cloud-platform
我正在尝试使用python的子进程模块运行php脚本.
proc = subprocess.Popen(['php', '-f', test.php], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
retCode = proc.wait
print retCode
val = float(kprocess.stdout.read())
return val
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
proc = subprocess.Popen(['php', '-f', test.php], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
val = float(kprocess.communicate()[0])
return val
Run Code Online (Sandbox Code Playgroud)
当我在python解释器中运行它时,两种方式都在本地工作,但是当我尝试在实际服务器上运行它时,我总是得到"ValueError at/empty string for float()".这让我相信这个过程在某种程度上没有被等待.我错过了什么?
编辑:我正在使用Django,所以当我使用Django运行时它似乎只会破坏.
我正在Linux中使用python开发一个小型工具。之前我使用的是Python 2.7,但现在将其更改为Python 3.4,以查看它是否可以帮助解决我的问题。当我给出以下代码时:
try:
x=subprocess.check_output(command, shell=True, timeout=3)
except subprocess.TimeoutExpired as exc:
print ("Timeout bro")
exit()
except Exception as e:
msg = "Some issues in fetching details"
print (msg)
Run Code Online (Sandbox Code Playgroud)
由于该命令从另一台设备获取详细信息,并且该设备无法正常运行,因此3秒钟后超时,并显示消息“ Timeout bro”。我阅读了使用shell = True的安全性问题,因此使它一次成为shell = False,第二次我删除了该参数。
try:
x=subprocess.check_output(command, shell=False, timeout=3)
except subprocess.TimeoutExpired as exc:
print ("Timeout bro")
exit()
except Exception as e:
msg = "Some issues in fetching details"
print (msg)
Run Code Online (Sandbox Code Playgroud)
我在不同的地方都读到该命令在shell = False上同样有效。但是,只要我在代码中运行上述代码,shell=False就无需等待3秒钟即可直接打印“获取详细信息中的某些问题”。有没有办法可以在没有shell = True的情况下运行代码?请帮忙。谢谢!
我正在尝试使用 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 文件内的多个类文件执行相同的操作
subprocess ×10
python ×9
python-3.x ×4
linux ×2
async-await ×1
call ×1
communicate ×1
exec ×1
java ×1
popen ×1
sys ×1
terminal ×1
wait ×1