如何将 MEL 变量中的换行符传递给 Python

How to pass newline characters in MEL variables to Python

我测试了以下代码。效果很好。

string $testString = "test";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+$testString+"\\')\')");

同样的,我可以用Python写一个包含换行符的变量,如下图

testString = "test\ntest\n"
with open('C:/Users/username/Desktop/testString.txt', 'w') as f:
    f.write(testString)

但是,当我测试下面的代码时,出现了错误。

string $testString = "test\ntest\n";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+$testString+"\\')\')");

错误信息如下:

# Error: line 2: EOL while scanning string literal # 

我想结合使用 MEL 和 Python 将多行字符串输出到文本文件。如果可能的话,我想通过仅更改 python 代码而不更改 MEL 变量的内容来实现此目的。

我该怎么做?

我的环境是Maya2020 + Python2。 但是,我得到与 Maya2022 + Python3.

完全相同的错误

您需要多次转义字符串中的“\”符号(对于 MEL、Python 和 exec):

string $testString = "test\\ntest\\n";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+$testString+"\\')\')");

或者,如果您希望完整保留字符串,请使用 encodeString:

string $testString = "test\ntest\n";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+ encodeString(encodeString($testString)) + "\\')\')");

顺便说一下,您不需要使用 exec。这样你就可以大大简化转义:

string $testString = "some test\ntest\n";
python("with open('C:/Users/username/Desktop/testString.txt', 'w') as f:\n\tf.write('"+ encodeString($testString) + "')");

另一种选择是使用 MEL 进行文件输出:

string $testString = "test\ntest\n";
$file_id = `fopen "C:/Users/username/Desktop/testString.txt" "w"`;
fprint $file_id $testString;
fclose $file_id;