0

我是 python 新手,正在尝试将此命令的输出转换为字符串,

C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py --temperature 0.8 --top_k 40 --model_name run1-- nsamples  1 --length 100

以下是我尝试使用“>>>”表示每个问题的方法。

有没有更好的方法我不知道?

蟒蛇 3.7 间谍

如何在 Tkinter 中运行 python 文件

from subprocess import Popen
p = Popen("C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py --temperature 0.8 --top_k 40 --model_name run1--nsamples  1 --length 100")
stdout, stderr = p.communicate()

>>>OSError: [WinError 193] %1 is not a valid Win32 application

从另一个 Python 脚本运行 Python 脚本,传入参数

import os
os.system("C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py --temperature 0.8 --top_k 40 --model_name run1 --nsamples  1 --length 100")

>>>(Script does not complete and output is not gathered)

将 os.system 的输出分配给一个变量并阻止它显示在屏幕上

text = os.popen('cat C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py --temperature 0.8 --top_k 40 --model_name run1 --nsamples  1 --length 100').read()

>>>(doesnt run it)

如何在给定完整路径的情况下导入模块?

import importlib.util
spec = importlib.util.spec_from_file_location("generate_unconditional_samples", "C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
foo.MyClass()

>>>ModuleNotFoundError: No module named 'fire'(fire is the first import call in the module also no augments)

Python:在执行 cmd 命令时读取输出

command='cmd /C C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py --temperature 0.8 --top_k 40 --model_name run1 --nsamples  1 --length 100'
proc=Popen(command,creationflags=CREATE_NEW_CONSOLE,stdout=PIPE)
output=proc.communicate()[0]
print (output)

>>>b''(thats the full output)

预期执行

C:\GPT2\gpt-2-finetuning>C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py --temperature 0.8 --top_k 40 --model_name run1 --nsamples  1 --length 100
2020-05-07 23:14:59.846175: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_100.dll'; dlerror: cudart64_100.dll not found
2020-05-07 23:14:59.852383: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
WARNING:tensorflow:From C:\GPT2\gpt-2-finetuning\src\model.py:147: The name tf.AUTO_REUSE is deprecated. Please use tf.compat.v1.AUTO_REUSE instead.

WARNING:tensorflow:From C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py:52: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.

2020-05-07 23:15:02.748274: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'nvcuda.dll'; dlerror: nvcuda.dll not found
2020-05-07 23:15:02.754792: E tensorflow/stream_executor/cuda/cuda_driver.cc:318] failed call to cuInit: UNKNOWN ERROR (303)
2020-05-07 23:15:02.769396: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: DESKTOP-[redacted]
2020-05-07 23:15:02.775857: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: DESKTOP-6H0CO8Q
2020-05-07 23:15:02.782411: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
WARNING:tensorflow:From C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py:54: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.

WARNING:tensorflow:From C:\GPT2\gpt-2-finetuning\src\model.py:148: The name tf.variable_scope is deprecated. Please use tf.compat.v1.variable_scope instead.

WARNING:tensorflow:From C:\GPT2\gpt-2-finetuning\src\model.py:152: The name tf.get_variable is deprecated. Please use tf.compat.v1.get_variable instead.

WARNING:tensorflow:From C:\GPT2\gpt-2-finetuning\src\model.py:36: The name tf.rsqrt is deprecated. Please use tf.math.rsqrt instead.

WARNING:tensorflow:From C:\GPT2\gpt-2-finetuning\src\model.py:166: The name tf.add_to_collection is deprecated. Please use tf.compat.v1.add_to_collection instead.

WARNING:tensorflow:From C:\GPT2\gpt-2-finetuning\src\sample.py:65: to_float (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use `tf.cast` instead.
WARNING:tensorflow:From C:\GPT2\gpt-2-finetuning\src\sample.py:16: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where
WARNING:tensorflow:From C:\GPT2\gpt-2-finetuning\src\sample.py:70: multinomial (from tensorflow.python.ops.random_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use `tf.random.categorical` instead.
WARNING:tensorflow:From C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py:63: The name tf.train.Saver is deprecated. Please use tf.compat.v1.train.Saver instead.

======================================== SAMPLE 1 ========================================
<user>dont be like that
<user>I dont want to be a kid anymore
(ect.)
4

1 回答 1

1

也许尝试调用 python 可执行文件(确保“python.exe”在路径中或指定完整路径):

from subprocess import Popen
p = Popen("python C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py --temperature 0.8 --top_k 40 --model_name run1 --nsamples 1 --length 100")
stdout, stderr = p.communicate()

您的参数中还有一些拼写错误(run1 后没有空格,--nsamples 后有两个空格)。您始终可以将参数列表传递给 Popen 以不必管理它:

from subprocess import Popen
p = Popen(["python", "C:\GPT2\gpt-2-finetuning\src\generate_unconditional_samples.py", "--temperature",  "0.8", "--top_k", "40", "--model_name", "run1", "--nsamples", "1", "--length", "100"])
stdout, stderr = p.communicate()
于 2020-05-08T06:58:19.480 回答