python - 在 Automator 工作流程中传输参数。 Python 外壳

标签 python file input arguments automator

enter image description here

因此,我正在 Apple 的 Automator 中创建一个工作流程,该工作流程在 shell 中使用 Python 脚本

这就是每个步骤现在正在做的事情:

1.我从 Excel 粘贴一列姓名

2.将它们组织在一个列表中......例如[‘a’、‘b’、‘c’] 。 。 。这就是奇怪的地方

3.我在查找器项上选择了一个文本文件,该文件是第二个 python 脚本 (#4) 中的输入,但问题是我还需要在脚本中从 #2 生成的列表

4.该脚本应该使用#2 中的列表和#3 选择的文件

当我没有 #3 时,它工作正常,因为我使用了 sys.argv 1让变量传输,但我不知道如何跳过将其输入“询问查找器项目”并直接输入#4

基本上,我在为另一个变量选择文件时无法将工作流程中的列表输入到脚本中,这样我就可以:

my_list = sys.argv[1] #from step 2
my_file = sys.argv[2] #selected from step 3

最佳答案

除非您在 #3 中选择“忽略此操作的输入”,否则它只会将选定的文件附加到脚本 #2 的输出作为其输出,因此脚本 #4 将获取它们。

问题是你得到了一个隐式的“从文本到文件/文件夹的转换”,将#2输入到#3中。因此,如果 #2 的输出是看起来像路径名但实际上不是的字符串列表,它们将被转换为不存在的文件的路径名,这将被转换为对不存在的文件的引用,这将当 #3 的输出转换回 #4 的文本时,它就会被删除。

<小时/>

解决这个问题的简单方法(概念上很简单;它确实意味着一些额外的代码......)是让脚本 #2 将列表存储在临时文件中,并打印出文件名。该文件名将通过转换并从另一端输出,因此脚本 #4 可以打开并读取文件以获取列表。

举一个愚蠢的例子,假设您正在这样做:

import sys
new_list = sorted(sys.argv[1:])
print '\n'.join(new_list)

相反,请执行以下操作:

import sys
import tempfile
new_list = sorted(sys.argv[1:])
with tempfile.NamedTemporaryFile('w', delete=False) as f:
    f.write('\n'.join(new_list))
    print f.name

然后,在脚本 #4 中,而不是这样:

import sys
new_list = sys.argv[1:-1]
step3 = sys.argv[-1]

...执行此操作:

import sys
with open(sys.argv[1]) as f:
    new_list = list(f)
os.remove(sys.argv[1])
step3 = sys.argv[2]

当然,在更现实的示例中,您可能想要使用,例如 pickle.dump 而不仅仅是 '\n'.join,但是这个应该足以展示这个想法。

关于python - 在 Automator 工作流程中传输参数。 Python 外壳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967264/

相关文章:

c - 当您在 Linux 中更改进程所有权 (uid/gid) 时,已经打开的文件会发生什么情况?

c# - 如何获取嵌入式资源的路径?

Linux 输入驱动程序无法正常工作

python - 分层 Pandas : How to create hierarchical pandas dataframe from columns of two dataframes?

python 3导入所有包与一部分

python - 在 python 中从多元 pdf 中采样

python - 在python中执行两行以上的bash代码

c++ - ifstream tellg() 没有返回正确的位置

javascript 函数 Math.pow 从输入文本中获取十进制值

c++ - 当找不到分隔符时,如何阻止 cin.getline() 导致控制台重复获取用户输入?