【发布时间】:2021-10-09 20:06:27
【问题描述】:
我对 bash 相当熟悉,并且知道如何编写一些涉及管道的基本脚本,并将它们用作“后端”来按顺序运行 python 脚本。
但是,对于我负责的新项目,我只能使用 PowerShell。我发现我可以很好地重写我以前的 shell 脚本,但是我听说你也可以在 PowerShell 中管道非文本数据。
我的问题是:
是否可以通过 PowerShell 将 Python 脚本中的非文本输出(主要是 pandas 数据帧)通过管道传输到另一个 Python 脚本中?
类似于:
script1.py | script2.py
如果是这样,关于 python 脚本的后勤工作是什么? IE 你还能回sys.stdout吗?
编辑:
为了更好地解释用例以符合我收到的 cmets。
我有两个 python 脚本,test1.py:
#test1.py
import pandas as pd
import sys
def main():
columns = ['A', 'B', 'C']
data = [
['hello', 0, 3.14],
['world', 1, 2.71],
['foo', 2, 0.577],
['bar', 3, 1.61]
]
df = pd.DataFrame(data, columns=columns)
return df
if __name__ == "__main__":
main().to_csv(sys.stdout, index_label=False)
和test2.py:
#test2.py
import pandas as pd
import sys
def main():
df = pd.read_csv(sys.stdin)
print(df.dtypes)
if __name__ == "__main__":
main()
我正在使用 PowerShell 进行一些自动化操作,并且需要将一个脚本的输出通过管道传输到另一个; python test1.py | python test2.py 工作得很好。
我的问题是,我听说您可以在 PowerShell 中传输非文本数据,而在 Bash 中无法做到这一点(我认为),那么是否可以按原样传输 Dataframe? (无需转换为 CSV 或其他字符串编码)
【问题讨论】:
-
为什么在地球上你需要这样做? [皱眉]您一个接一个地运行 2 个 python 实例......所以只需使用 python 编码方法从一个到另一个获取信息。 powershell 在这种情况下没有任何位置。
-
也许作者只能控制一个或没有一个python源文件。也许这个过程已经在 linux 上运行了多年,他们希望将它移植到 windows 而不重写逻辑。这似乎是一个合理的问题,尽管我确实鼓励原始海报展示他们迄今为止所做的更多尝试。
-
感谢大家的反馈。 [grin] 需要将一个 python 脚本输出提供给第二个似乎仍然很奇怪......但不要使用 python 来做到这一点。
-
@Lee_Dailey 不用担心!
-
在那篇文章的核心内容中,有一些关于 powershell
|总是进行编码的讨论,因此无法传输二进制数据。我不知道足够多的 powershell 来提供真正的帮助。
标签: python python-3.x powershell pipe powershell-3.0