交互式python到shell变量的输出

交互式python到shell变量的输出,python,Python,有一个交互式python脚本,类似于 def myfunc(): print("enter value between 1 to 10") i=int(input()) if(i<1 or i>10): print("again") myfunc() else: print(i) python myFile.py | read a 每次我运行命令时,上面的查询都

有一个交互式python脚本,类似于

def myfunc():
    print("enter value between 1 to 10")
    i=int(input())
    if(i<1 or i>10):
        print("again")
        myfunc()
    else:
        print(i)
python myFile.py | read a
每次我运行命令时,上面的查询都会被卡住。有可能吗? 尽管
(read b | python myFile.py)| read a
违背了交互式python函数的目的,但它也不起作用。如果
myfunc()
是非交互式的(不需要用户输入),则它可以工作。实际上,函数接受一些输入,对其进行操作,然后以所需格式输出结果。我知道使用python或shell会容易得多,但由于我已经编写了python函数,我想知道是否可以将两者链接起来。如果是,是否也可以只向shell变量添加最终值,而不是所有的
print()

当我这样做时,同样的问题也会发生(终端卡住)

python myFile.py > someFilename

然而,即使终端没有响应,还是创建了文件
someFilename
。壳牌似乎同时启动了这两个过程,这是有道理的。我猜,如果在打开管道之前,
python myfile.py
以某种方式独立执行,这可能是可能的,但我可能错了。

如果您使用的是Linux或其他Unix变体,请尝试:

import os
def myfunc():
    tty = os.open("/dev/tty", os.O_WRONLY)
    os.write(tty, "enter value between 1 to 10\n")
    i=int(input())
    if(i<1 or i>10):
        os.write(tty, "again\n")
        myfunc()
    else:
        print(i)
否则在子shell中调用
reada
,变量
a

无法在以下代码中引用。

这非常有效。谢谢不过,还有一个后续疑问。当我作为
python myfile.py
运行此函数时,它会抛出错误,直到我将
os.write
中的字符串部分更改为字节。我将其转换为字节,然后当我试图从shell调用时,它抛出了一个错误,说应该是字符串。为什么?谢谢你的及时反馈。在将字符串更改为字节之前,会给出什么错误消息?在我的环境中,
os.write(tty,“输入1到10之间的值”)
os.write(tty,bytes(“输入1到10之间的值”)
都可以工作。下面是错误:
os.write(tty,“输入1到10之间的值”)类型错误:需要类似字节的对象,而不是“str”
。字节也不起作用
bytes(“输入1到10之间的值”)
抛出错误
TypeError:string参数没有编码
,因此必须在bytes函数中添加“utf-8”参数我实际上是在mac而不是linux中尝试的,这可能是原因吗?感谢您提供详细信息。它与macOS无关,但与区域设置相关。那么您添加了“utf-8”参数,现在它可以工作了?
read a < <(python myFile.py)